Android Lollipop,从工具栏中的标题添加弹出菜单

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/26510930/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 11:39:08  来源:igfitidea点击:

Android Lollipop, add popup menu from title in toolbar

androidandroid-5.0-lollipopandroid-toolbar

提问by Matt Wear

I'm unable to see how adding a popup menu from the title is accomplished like is shown in many of the material design examples. Any help would be much appreciated.

我无法看到如何从标题中添加弹出菜单,就像许多材料设计示例中所示。任何帮助将非常感激。

Toolbar Popup From Title

从标题弹出工具栏

回答by Chris Banes

You're going to need to add a Spinner to the Toolbar:

您将需要向工具栏添加一个 Spinner:

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_height="?attr/actionBarSize"
        android:layout_width="match_parent"
        android:background="?attr/colorPrimary">

    <Spinner
            android:id="@+id/spinner_nav"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

</android.support.v7.widget.Toolbar>

You will then need to disable the default title:

然后,您需要禁用默认标题:

Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);

You can then retrieve and setup the Spinner as needed in your Activity/Fragment.

然后,您可以根据需要在 Activity/Fragment 中检索和设置 Spinner。

回答by Ruan_Lopes

I came across this question while I was trying to find a solution to prevent the popup to overlay the spinner and I would like to leave here an alternative solution to this question as its possible to add the spinner to the toolbar using the menu.xml as well

当我试图找到一个解决方案来防止弹出窗口覆盖微调器时,我遇到了这个问题,我想在这里留下这个问题的替代解决方案,因为它可以使用 menu.xml 将微调器添加到工具栏作为好

activity_main.xml

活动_main.xml

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fitsSystemWindows="true">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorAccent" />

</android.support.design.widget.AppBarLayout>

 <!-- Other layout widgets -->

</LinearLayout>

menu_main.xml

菜单_main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item
    android:id="@+id/spinner"
    android:title="Spinning"
    app:actionViewClass="android.widget.Spinner"
    app:showAsAction="always" />

<!-- Other items -->

</menu>

Your Activity

您的活动

It will be necessary to override the onCreateOptionMenu()method, then use getMenuInflater()to inflate the menu file created earlier.

有必要覆盖onCreateOptionMenu()方法,然后使用getMenuInflater()扩充之前创建的菜单文件。

You will also need to get the Spinner item and set an adapter to it as you would normally do.

您还需要像往常一样获取 Spinner 项目并为其设置适配器。

   @Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.menu_main, menu);

    //Get Spinner item from menu

    MenuItem spinnerMenuItem = menu.findItem(R.id.spinner);
    final Spinner spinner = (Spinner) MenuItemCompat.getActionView(spinnerMenuItem);

    //Set adapter whichever way you prefer (from the resource or manually)

    final ArrayAdapter<CharSequence> spinnerAdapter = ArrayAdapter
            .createFromResource(this, R.array.items_array, android.R.layout.simple_spinner_dropdown_item);
    spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(spinnerAdapter);

    return true;

}

Style.xml

样式文件

Finally, if you want to customize your spinner

最后,如果您想自定义微调器

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:spinnerStyle">@style/spinner_style</item>
</style>

<style name="spinner_style" parent="Widget.AppCompat.Spinner">
    <item name="android:dropDownVerticalOffset">40dip</item>
    <!--<item name="android:dropDownHorizontalOffset">0dip</item>-->
    <item name="overlapAnchor">false</item>

    <!--Other customizations-->

</style>