【问题标题】:How do I show Overflow Menu Items to Action Bar in Android如何在 Android 中将溢出菜单项显示到操作栏
【发布时间】:2013-03-07 17:34:02
【问题描述】:

我正在编写一个 Android 应用程序,我试图在其中 向 ActionBar 显示溢出菜单项

使用这个很棒的教程链接:http://wptrafficanalyzer.in/blog/adding-action-items-and-overflow-menu-items-to-action-bar-in-android/

问题:

Not getting Overflow Menu Items (Icon)

请参阅下面的屏幕截图以获得更清晰的信息:

Manifest.xml:

<uses-sdk android:minSdkVersion="14" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" 
        android:uiOptions="splitActionBarWhenNarrow"              
        >

items.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
    android:id="@+id/phone"
    android:title="@string/phone"
    android:icon="@drawable/phone"
    android:showAsAction="ifRoom|withText"
/>

<item
    android:id="@+id/computer"
    android:title="@string/computer"
    android:icon="@drawable/computer"
    android:showAsAction="ifRoom|withText"
/>

<item
    android:id="@+id/gamepad"
    android:title="@string/gamepad"
    android:icon="@drawable/gamepad"
    android:showAsAction="ifRoom|withText"
/>

<item
    android:id="@+id/camera"
    android:title="@string/camera"
    android:icon="@drawable/camera"
    android:showAsAction="ifRoom|withText"
/>

<item
    android:id="@+id/video"
    android:title="@string/video"
    android:icon="@drawable/video"
    android:showAsAction="ifRoom|withText"
/>

<item
    android:id="@+id/email"
    android:title="@string/email"
    android:icon="@drawable/email"
    android:showAsAction="ifRoom|withText"
/>
 </menu>

我正在使用本教程,并尝试制作图 6:拆分操作栏中​​的操作项和溢出菜单

请帮我将溢出菜单项 (ICON) 显示到 ActionBar

现在,每当我在模拟器中单击菜单按钮时,我都会得到其他菜单项....

【问题讨论】:

  • 将 ifRoom 参数更改为始终显示所有项目
  • 您可以在链接文章的屏幕截图中清楚地看到该设备具有返回、主页和任务按钮,因此无法调用溢出菜单:stackoverflow.com/a/23721321/253468

标签: android android-actionbar


【解决方案1】:

只是说如果您的设备有菜单按钮,则不会显示溢出图标,在较新的手机上会显示溢出按钮。我不会推荐 ASMUIRTI 的答案,因为它是一个糟糕的 hack,它破坏了与平台上其他应用程序的一致性。

你必须使用

android:showAsAction="never"

让安卓设备决定该设备是否需要溢出菜单。

【讨论】:

  • 在某些设备上(我在 Galaxy Tab 3、OS 4.2.2 上测试过)它会导致隐藏项目仅在“菜单”按钮单击时可用
【解决方案2】:

要在操作栏中显示三个点图标,只需在 OnCreate() 中使用以下方法:

   private void getOverflowMenu() {

    try {
       ViewConfiguration config = ViewConfiguration.get(this);
       Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
       if(menuKeyField != null) {
           menuKeyField.setAccessible(true);
           menuKeyField.setBoolean(config, false);
       }
   } catch (Exception e) {
       e.printStackTrace();
   }
 }

【讨论】:

  • 这是一个 hack...我绝对不会使用它。接受的答案应该是 Akshat Agarwal 的
  • 这是显示溢出图标的正确方法吗?这应该被接受为答案吗?!!!
  • @max.mustermann 可能是 hack 或其他任何东西。但它运作良好。我看到了这个答案 here
  • @Naruto ,作为 Akshat Agarwal 的答案也确实有效,使用更少的代码(零,它只是配置)并且如果发布新的 android 版本,也不会/不太容易出现错误,我真的不看到一个正当的理由,为什么这是公认的答案。
  • @Naruto 没有指出这一点,既没有问题也没有答案,或者我错过了什么;)。在这种情况下,这可能是最好的工作解决方案。但作为一般建议,我更喜欢 XML 配置而不是通过反射访问私有字段。
【解决方案3】:

这可能是另一种解决方法,这对我很有帮助。保留一个带有三个点的可绘制对象,并将其作为菜单项。

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


<item
    android:id="@+id/saveDetails"
    android:showAsAction="always"
    android:title="@string/save"/>

<item
    android:id="@+id/menu_overflow"
    android:icon="@drawable/dts"
    android:orderInCategory="11111"
    android:showAsAction="always">
    <menu>
        <item
            android:id="@+id/contacts"
            android:showAsAction="never"
            android:title="Contacts"/>


        <item
            android:id="@+id/service_Tasks"
            android:showAsAction="never"
            android:title="Service Tasks"/>


        <item
            android:id="@+id/charge_summary"
            android:showAsAction="never"
            android:title="Charge Summary"/>


        <item
            android:id="@+id/capture_signature"
            android:showAsAction="never"
            android:title="Capture Signature"/>
    </menu>
</item>

 </menu>

【讨论】:

【解决方案4】:

如果我正确理解了您的问题,并且您想在操作栏上显示所有图标,请更改菜单项中的此参数

android:showAsAction="ifRoom|withText"

到这里

android:showAsAction="always"

【讨论】:

  • 所以在你的菜单中你想要图标而不是文本?如果是这样,我认为这是不可能的。
  • @Neil 他不想将菜单项显示为溢出项,而是一些选定的项
【解决方案5】:

如果您使用支持库,为了在操作栏中显示菜单项,您必须在 xml 中使用以下语法:

yourappname:showAsAction="ifRoom|withText"

【讨论】:

    【解决方案6】:

    具有菜单硬件按钮的手机在点击硬件按钮时会显示额外的菜单项。没有硬件菜单按钮的较新手机会自动将溢出菜单图标添加到操作栏。 额外的菜单项是那些将“showAsAction”属性设置为从不的菜单项。

    【讨论】:

      【解决方案7】:

      在AndroidManifest.xml之间添加

      android:theme="@android:style/Theme.Holo.Light"
      

      在您的应用程序中添加操作栏。

      之后,进入 menu.xml 并添加以下内容

      xmlns:tools="http://schemas.android.com/tools
      

      之间 最后在每一项中添加

      android:showAsAction="always"
      tools:ignore="AppCompatResource"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多