Android appcompat操作栏菜单项showAsAction无效

时间:2014-02-19 05:22:08

标签: android menu android-actionbar android-appcompat

我有一个菜单项,显示在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>

有什么想法吗?

编辑:删除双引号错误

可能是因为我只显示文字,没有图标吗?我有点被困在这里。

5 个答案:

答案 0 :(得分:26)

哇,谢谢你的帮助,但我设法搞清楚了。它不是xml的问题,它是onCreateOptionsMenu函数的一个问题。

我正在使用这个

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

而不是

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

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

答案 1 :(得分:17)

<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框架中不存在这些属性。因此,您必须使用自己的命名空间作为支持库定义的所有属性的前缀。

答案 2 :(得分:4)

在我的情况下,我不得不在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);
    }

答案 3 :(得分:0)

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

同时检查link

答案 4 :(得分:0)

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

has_many through

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

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