如何在操作栏上添加下拉项

Posted

技术标签:

【中文标题】如何在操作栏上添加下拉项【英文标题】:How to add a Dropdown item on the action bar 【发布时间】:2012-01-08 21:16:02 【问题描述】:

在我的 android Honeycomb 应用程序中,我使用 Tabs 作为导航样式。我想在溢出按钮旁边添加一个项目,但我希望该项目是一个下拉列表,用户将能够在那里选择一个选项,但与导航无关。自从我使用mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);以来,最简单的方法是什么@

是否可以在不使用自定义视图的情况下做到这一点?

【问题讨论】:

检查 4 链接:这些链接对您有帮助 fizzylogic.azurewebsites.net/2012/03/05/… github.com/StylingAndroid/StylingActionBar github.com/StylingAndroid/BasicActionBar 【参考方案1】:

第一个选项:

菜单/选项.xml:

<item
    android:icon="@drawable/ic_menu_sort"
    android:showAsAction="ifRoom">
    <menu>
        <item
            android:id="@+id/menuSortNewest"
            android:title="Sort by newest" />
        <item
            android:id="@+id/menuSortRating"
            android:title="Sort by rating" />
    </menu>
</item>

第二个选项:

菜单/选项.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menuSort"
        android:showAsAction="ifRoom"
        android:actionLayout="@layout/action_sort"  />
</menu>

布局/action_sort.xml:

<Spinner xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:background="@drawable/ic_menu_refresh"
    android:entries="@array/order" />

菜单资源文档 - http://developer.android.com/guide/topics/resources/menu-resource.html

【讨论】:

这些子菜单是一个很好的提示!为我节省了数小时的研究和工作时间,谢谢! 我如何响应微调器的点击? 这不适用于 Android 2.2。该应用程序正在崩溃。你有解决办法吗? 使用 ActionBarSherlock...他们没有在 Android 2.2 中引入 ActionBar,因此 ActionBarSherlock 允许您追溯这些功能的日期。 actionbarsherlock.com @Sandeep Maram 您可以在onCreateOptionsMenu() 中通过Spinner spinner = (Spinner)menu.findItem(R.id.menuPeriodType).getActionView() 获得微调器。然后设置项目选择监听器。【参考方案2】:

到目前为止,我找到的绝对最好和最简单的答案是here。

在这种情况下,基本上不需要自定义布局。只需设置actonViewClass:

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

  <item android:id="@+id/spinner"
    yourapp:showAsAction="ifRoom"
    yourapp:actionViewClass="android.widget.Spinner" /> <== this is all that's required
</menu>

然后像往常一样在onCreateOptionsMenu中处理:

@Override
public boolean onCreateOptionsMenu(Menu menu) 
    getMenuInflater().inflate(R.menu.menu_layout, menu);
    MenuItem item = menu.findItem(R.id.spinner);
    Spinner spinner = (Spinner) MenuItemCompat.getActionView(item); // get the spinner
    spinner.setAdapter(adapter); 
    spinner.setOnItemSelectedListener(onItemSelectedListener); 

这是迄今为止最简单、最干净的解决方案。感谢原作者 François Poyer。

【讨论】:

测试和批准。【参考方案3】:

它只能作为下拉菜单使用

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <!--<item-->
    <!--android:id="@+id/save_contact"-->
    <!--android:icon="@drawable/edit_new"-->
    <!--android:title="Save Contact"-->
    <!--app:showAsAction="never" />-->

    <item
        android:id="@+id/send_money"
        android:icon="@drawable/edit_new"
        android:title="Send Money"
        app:showAsAction="never" />

    <item
        android:id="@+id/request_money"
        android:icon="@drawable/edit_new"
        android:title="Request money"
        app:showAsAction="never" />

    <item
        android:id="@+id/recharge"
        android:icon="@drawable/edit_new"
        android:title="Recharge"
        app:showAsAction="never" />
</menu>

内部片段

setHasOptionsMenu(true)

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
    inflater.inflate(R.menu.chat_details_menu, menu);


    super.onCreateOptionsMenu(menu, inflater);

【讨论】:

以上是关于如何在操作栏上添加下拉项的主要内容,如果未能解决你的问题,请参考以下文章

如何更改操作栏上菜单项的位置

如何将覆盖视图放在操作栏上 Sherlock

如何在导航栏上设置常用栏按钮项

如何在带有更多片段的操作栏上添加后退按钮

如何在android中的操作栏上添加多个图标?

如何在颤动中选择基于下拉项添加文本字段值