简体   繁体   English

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

[英]Android Lollipop, add popup menu from title in toolbar

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. 任何帮助将非常感激。

工具栏弹出标题

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。

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 activity_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 menu_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 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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM