菜单图标未在操作栏上显示

6
Android Studio 0.5.8

你好,

由于某些原因,在ActionBar上图标从未显示过,我已经尝试了 ifRoom|withText 的组合但仍然不显示。 我还尝试在横向模式下进行旋转。 我正在使用 genymotion 4.4.2。

<?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:title="@string/new_crime"
        android:id="@+id/menu_item_new_crime"
        android:icon="@drawable/ic_action_new"
        app:showAsAction="always"/>
</menu>

我正在一个片段中展开菜单:

 @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.fragment_crime_list, menu);
    }

这里是一张截图: 输入图片描述

我已经尝试在纵向和横向模式下使用硬件 Nexus5,但没有图标。

我也尝试了以下方法,但也没有起作用:

android:icon="@android:drawable/ic_menu_add"

非常感谢您的建议,

谢谢!

3个回答

13

我自己曾经遇到过这个问题。尝试这个:

<?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:title="@string/new_crime"
        android:id="@+id/menu_item_new_crime"
        android:icon="@drawable/ic_action_new"
        android:showAsAction="always"
        app:showAsAction="always"/>
</menu>

我不知道为什么需要两者都有,但由于某些原因,这对我有用。


尝试了您所说的,似乎只需要这样就可以工作:android:showAsAction="ifRoom|withText" 我使用app:showAsAction的原因是Android Studio给我报错:"应该在xmlns:app="http://schemas.android.com/apk/res-auto"中使用appcompat库的app:showAsAction"。 - ant2009
1
我忽略了错误“应该使用appcompat库的app:showAsAction...”,并成功编译了代码。菜单项显示在操作栏中。 - Manish Mulimani
非常感谢。忽略警告,同时使用android:showAsAction和app:showAsAction解决了问题。 - samir105
@AlexBerdnikov,它不应该这样工作。我认为这是一个设备特定的问题。一些设备(主要是三星设备)没有很好地遵循Android标准,并且会破坏许多像这样的小东西。我的建议:如果你不必担心它,就不要担心它——这是你正在测试的设备的问题,而不是你的问题。 - Xaver Kapeller
1
@AlexBerdnikov 是的,这是一个奇怪的问题。然而,我从未能够可靠地重现它。在我多年的应用程序开发中,我只遇到过这个问题两次,一次是特定的三星设备,另一次是单个HTC设备,但后来当我开发不同的应用程序时,这些设备都没有这个问题。我从未弄清楚需要做什么才能触发此问题。如果你遇到了这个问题,我认为最好记住Romain Guy几年前在Google IO的炉边聊天中所说的话:“祝你好运”。 - Xaver Kapeller
显示剩余2条评论

2
您正在使用Android Studio,如黑色气泡所述: "lint检查看到您已通过gradle导入了appcompat库,并且认为由于您的库导入,应该使用ActionBarActivity。这就是为什么您会收到错误信息的原因。" 我也遇到了同样的问题。 Android Studio给出了错误提示:"应该使用带有xmlns:app ="schemas.android.com/apk/res-auto"的appcompat库中的app:showAsAction。如果按照建议更改我的XML,我的操作栏菜单就消失在溢出区域中。如果忽略此错误,则会得到预期的行为,但错误仍然困扰着我。
实际的罪魁祸首是build.gradle文件中的以下行:
dependencies {
    …
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile 'com.android.support:support-v4:22.1.1'
}

这个问题是由于导入了appcompat库造成的。因为我只针对Android 4.4及以上版本进行开发,所以我删除了这两行代码。问题解决了!

在阅读blackfizz的答案之前,我浪费了几个小时来解决这个问题,所以我在这里发布我的答案,希望能节省其他开发人员的时间。

当你遇到类似的情况时,请先检查你的build.gradle文件,看看是否不小心导入了appcompat库。


0

您需要使用Theme.Holo样式而不是AppCompat样式。 为此,只需在AndroidManifest.xml中更改应用程序的样式即可。 如果出现错误:

应该使用带有xmlns:app="schemas.android.com/apk/res-auto"的appcompat库的app:showAsAction

那么您需要更改模块设置:
1-右键单击您的应用程序并选择打开模块设置(或只需按F4)
2-在依赖项中,添加一个新于V7的支持模块(例如com.android.support:support-v13:22.0.0)

在menu.xml中,不要写:

app:showAsAction="ifRoom"

但是写

android:showAsAction="ifRoom"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接