【问题标题】:Android appcompat actionbar menu item showAsAction not workingAndroid appcompat 操作栏菜单项 showAsAction 不起作用
【发布时间】:2014-03-19 06:25:33
【问题描述】:

我有一个在 android 4.x 上显示但在 2.x 上没有的菜单项。这是我的 menu.xml

<?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/menu_filter"
    android:title="Filter"
    app:showAsAction="always"/>  
</menu>

这是我的操作栏样式

<style name="style1_actionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
    <item name="android:background">@color/blue_dark</item>
    <item name="android:textColor">@color/white</item>
    <item name="actionMenuTextAppearance">@color/white</item>
    <item name="background">@color/blue_dark</item>
</style>

有什么想法吗?

编辑:删除双引号错字

难道是我只显示文本而不显示图标吗?我有点卡在这里。

【问题讨论】:

  • 您在xmlns:app="”http://schemas.android.com/apk/res-auto”" 处有一个错误...观察开头和结尾的两个双引号...应该是xmlns:app="http://schemas.android.com/apk/res-auto"。这可能是一个拼写错误:-)
  • 伙计,我真的很兴奋,并认为这会解决它,但不,即使修复了同样的问题

标签: android menu android-actionbar android-appcompat


【解决方案1】:

哇,谢谢你们的帮助,但我设法弄清楚了。不是 xml 的问题,是 onCreateOptionsMenu 函数的问题。

我在用这个

new MenuInflater(getApplication()).inflate(R.menu.activity_wentry_editor, menu); 

而不是这个

MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_wentry_editor, menu);

不完全确定为什么会这样,但确实如此。

【讨论】:

  • 第一个不起作用(使用 getAppliction())的原因是因为这将使用不使用 AppCompat 的应用程序上下文。当您使用活动 getMenuInflator() 时,它将使用 AppCompat 和您的应用程序命名空间。
【解决方案2】:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
  **xmlns:yourapp="http://schemas.android.com/apk/res-auto"** >

    <item android:id="@+id/action_search"
      android:icon="@drawable/ic_action_search"
      android:title="@string/action_search"
      **yourapp**:showAsAction="ifRoom"  />
</menu>

请参阅文档。 http://developer.android.com/guide/topics/ui/actionbar.html

使用支持库中的 XML 属性

请注意,上面的 showAsAction 属性使用标签中定义的自定义命名空间。这在使用支持库定义的任何 XML 属性时是必需的,因为这些属性在旧设备上的 Android 框架中不存在。因此,您必须使用自己的命名空间作为支持库定义的所有属性的前缀。

【讨论】:

    【解决方案3】:

    就我而言,我必须在 onCreateOptionsMenu 中添加几行。

    Android Studio 不允许我在使用 appCompat 时使用 android:showAsAction="ifRoom"。

    app:showAsAction="ifRoom" 不工作,我删除它没有问题。

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater  inflater = getMenuInflater();
            inflater.inflate(R.menu.menu, menu);
            for (int i = 0; i < menu.size(); i++) {
                menu.getItem(i).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
            }
            return super.onCreateOptionsMenu(menu);
        }
    

    【讨论】:

    • 谢谢!这个是为我做的!
    【解决方案4】:

    如果您希望您的应用支持低于 3.0 的操作栏,您需要使用支持库中的 app compact v7。

    同时检查link

    【讨论】:

    【解决方案5】:

    在扩展 AppCompact 的 Activity 中使用菜单,必须在 XML 中导入应用上下文并使用它:

    <menu xmlns:android="http://schemas.android.com/apk/res/android" 
          xmlns:app="http://schemas.android.com/apk/res-auto">
    
        <!-- "Mark Favorite", should appear as action button if possible -->
        <item
            android:id="@+id/action_favorite"
            android:icon="@drawable/ic_favorite_black_48dp"
            android:title="@string/action_favorite"
            app:showAsAction="ifRoom"/>
    
        <!-- Settings, should always be in the overflow -->
        <item android:id="@+id/action_settings"
              android:title="@string/action_settings"
              app:showAsAction="never"/>
    
    </menu>
    

    您需要做的基本上是将xmlns:app="http://schemas.android.com/apk/res-auto"添加到您的XML中的菜单元素并使用以下格式的showAsActionapp:showAsAction="ifRoom"

    如果可能,这将在操作栏中显示图标。

    【讨论】:

      猜你喜欢
      • 2014-04-30
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      相关资源
      最近更新 更多