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

Pau*_*ros 82 android android-layout android-3.0-honeycomb android-spinner android-actionbar

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

是否可以在不使用自定义视图的情况下执行此操作?

fhu*_*cho 220

第一种选择:

菜单/ options.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>
Run Code Online (Sandbox Code Playgroud)

第二种选择:

菜单/ options.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>
Run Code Online (Sandbox Code Playgroud)

布局/ action_sort.xml:

<Spinner xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/ic_menu_refresh"
    android:entries="@array/order" />
Run Code Online (Sandbox Code Playgroud)

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

  • 如何回应微调器的点击? (7认同)
  • @Sandeep Maram你可以通过`onCreateOptionsMenu()`中的`Spinner spinner =(Spinner)menu.findItem(R.id.menuPeriodType).getActionView()`获得微调器.然后设置项目选择侦听器. (4认同)
  • 使用ActionBarSherlock ......他们没有在Android 2.2中引入ActionBar,因此ActionBarSherlock允许您返回这些功能的日期.http://actionbarsherlock.com/ (3认同)
  • 那些子菜单是个很棒的小贴士!节省了我几个小时的研究和工作,谢谢! (2认同)
  • 这不适用于Android 2.2.该应用程序正在崩溃.你有解决方案吗? (2认同)

Ale*_*jak 33

到目前为止,我发现的最好和最简单的答案绝对是在这里.

基本上,在这种情况下不需要自定义布局.只需设置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>
Run Code Online (Sandbox Code Playgroud)

然后像往常一样在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); 
Run Code Online (Sandbox Code Playgroud)

这是迄今为止最简单,最干净的解决方案.致原作者FrançoisPoyer.