【问题标题】:menu icon not displaying on action bar菜单图标未显示在操作栏上
【发布时间】:2015-05-28 04:00:39
【问题描述】:
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"

非常感谢您的任何建议,

【问题讨论】:

    标签: android android-actionbar


    【解决方案1】:

    我自己也遇到过这个问题。试试这个:

    <?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 给了我一个错误:“应将 app:showAsAction 与带有 xmlns:app="schemas.android.com/apk/res-auto" 的 appcompat 库一起使用
    • 我忽略了错误“应该将 app:showAsAction 与 appcompat 库一起使用...”并且能够成功编译代码。菜单项显示在操作栏中。
    • 非常感谢。忽略警告,同时放置 android:showAsAction 和 app:showAsAction 解决了这个问题。
    • 它确实有效,但我想知道它为什么有效?它从未在文档中的任何地方提及...
    • @AlexBerdnikov 是的,这是一个奇怪的问题。但是我从来没有能够可靠地复制它。在我开发应用程序的这些年里,我只遇到过两次这个问题,一次是使用特定的三星设备,另一次是使用单个 HTC 设备,但后来当我开发不同的应用程序时,这些相同的设备没有这个问题。我从来没有想过要触发这个问题需要做什么。如果您遇到它,我认为最好记住几年前 Romain Guy 在 Google IO 的炉边聊天中所说的话:“祝你好运”。
    【解决方案2】:

    您正在使用 Android Studio,正如 here by blackfizz 所解释的那样:“lint 检查发现您已通过 gradle 导入了 appcompat 库,并且它认为您应该使用 ActionBarActivity,因为您的库已导入。这就是您获得错误。”

    我遇到了确切的问题。 Android Studio 给了我错误“应该使用 app:showAsAction 和带有 xmlns:app="schemas.android.com/apk/res-auto" 的 appcompat 库。如果我按照建议更改了我的 XML,我在 actionBar 中的菜单消失了进入溢出。如果我忽略了错误,我得到了预期的行为,但错误仍然困扰着我。

    真正的罪魁祸首原来是文件 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库。

    【讨论】:

      【解决方案3】:

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

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

      然后你需要更改模块设置:
      1 - 右键单击​​您的应用并选择打开模块设置(或直接按 F4)
      2-在依赖项中,添加比 V7 更新的支持模块(例如 com.android.support:support-v13:22.0.0)

      在menu.xml中,不要写:

      app:showAsAction="ifRoom"
      

      但是写

      android:showAsAction="ifRoom"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-23
        • 1970-01-01
        • 2014-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多