【问题标题】:How to add dropdown menu to ActionBar in Android project?如何在 Android 项目中向 ActionBar 添加下拉菜单?
【发布时间】:2012-10-06 10:55:03
【问题描述】:

我一直在开发 Android 应用程序,但我对 4+ 版本的 Android 了解不多。因此,请帮助我 - 我制作了带有导航标签的 Android 应用程序:

final ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

但我还需要将下拉菜单添加到 ActionBar 以实现其他目标。我可以做吗?请,如果可能的话,给我一个例子。先感谢您。

【问题讨论】:

    标签: android


    【解决方案1】:

    你可以使用一个叫做 android spinner 的东西。它看起来像这样:

    您也可以通过多种方式对其进行自定义以适应您的应用设计。

    以下是 Google 提供的关于如何使用它们的精彩教程:

    http://developer.android.com/guide/topics/ui/controls/spinner.html

    如果您想将其添加到操作栏,您可以通过微调器适配器来完成,详见此处: http://developer.android.com/guide/topics/ui/actionbar.html#Dropdown

    如果您想添加图标来执行某些操作,那么您可以看到: http://developer.android.com/guide/topics/ui/actionbar.html#ActionItems

    如果您想在栏本身中执行某些操作(例如在 google 搜索应用中进行搜索),请查看以下内容: http://developer.android.com/guide/topics/ui/actionbar.html#ActionView

    如果您想添加导航选项卡,请查看以下内容: http://developer.android.com/guide/topics/ui/actionbar.html#Tabs

    【讨论】:

    • 我知道这个元素的存在,但我不知道如何将微调器添加到操作栏
    • 它不符合我的任务。请告诉我,如何将 TextView 或图标添加到 ActionBar?
    • 添加了更多资源来帮助您。您不能将普通的 textView 和图标添加到操作栏,因为它是一个特殊的 UI 元素,而不是普通的布局。但是你可以添加一些可以帮助你完成任务的东西。
    • 我需要有带有按钮/图标的ActionBar,例如图标“搜索”,以帮助用户做普通的事情
    • 为每个任务添加操作项。请参阅我上面提到的资源。您可以将任何您想要的图标添加到操作项,并且您可以设置操作侦听器,当用户单击它们时将执行您想要的任何操作。
    【解决方案2】:

    到目前为止,我找到的绝对最好、最简单的答案就在这里。

    在这种情况下,基本上不需要自定义布局。只需设置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" />
    </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);
        spinner.setAdapter(adapter); // set the adapter to provide layout of rows and content
        s.setOnItemSelectedListener(onItemSelectedListener); // set the listener, to perform actions based on item selection
    

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

    【讨论】:

    • 那为什么不直接链接到答案呢?
    • 如果我给出答案,你会说链接不可靠:)
    • 那为什么不在评论中链接呢?
    • 链接不可靠,应该是评论。
    • 这是解决问题的方法。提供了更完整的微调器示例
    猜你喜欢
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    相关资源
    最近更新 更多