Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android工具栏弹出菜单不显示图标_Android_Android Menu_Android Toolbar - Fatal编程技术网

Android工具栏弹出菜单不显示图标

Android工具栏弹出菜单不显示图标,android,android-menu,android-toolbar,Android,Android Menu,Android Toolbar,我正在尝试显示工具栏的下拉菜单,其中包括文本和图标: <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/menu_add" android:title="@string/menu.add"

我正在尝试显示工具栏的下拉菜单,其中包括文本和图标:

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

    <item
        android:id="@+id/menu_add"
        android:title="@string/menu.add"
        android:icon="@drawable/ic_add_black_24dp"
        app:showAsAction="always" />

    <item
        android:id="@+id/menu_edit"
        android:title="@string/menu.edit"
        android:icon="@drawable/ic_create_black_24dp"
        app:showAsAction="never" />

</menu>

“添加”菜单确实会显示工具栏上的图标,但“编辑”菜单只显示没有图标的文本

答案是:谷歌故意删除了它,但并没有提到你可以如何覆盖它

编辑
我还需要设备的“菜单”按钮来显示相同的菜单。

是的,它不会显示在新版本的支持库中,但您可以通过添加子菜单来实现。(您可以通过xml和代码添加它)。 像这样:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_settings"
        android:icon="@drawable/abc_ic_menu_moreoverflow_mtrl_alpha"
        android:title="@string/action_settings"
        app:showAsAction="always">
        <menu>
            <item
                android:icon="@drawable/ic_event"
                android:title="@string/action_settings"
                app:showAsAction="always" />
            <item
                android:icon="@drawable/ic_event"
                android:title="@string/action_settings"
                app:showAsAction="always" />
        </menu>
    </item>
</menu>
@SuppressLint("RestrictedApi")
fun Menu.showIcons() {
    (this as? MenuBuilder)?.setOptionalIconsVisible(true)
}

希望有帮助:) 编辑:请参见上述代码的快照:

=>

我找到了这个解决方案:。基本上,重写方法不会破坏设备菜单按钮或溢出。
感谢大家。

它在android support v7版本上不起作用,但您可以通过稍微修改来调整它。下面的代码适合我

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">

<item
    android:id="@+id/action_settings"
    android:icon="@drawable/abc_ic_menu_moreoverflow_mtrl_alpha"
    android:title="@string/action_settings"
    app:showAsAction="always">
    <menu>

        <item
            android:id="@+id/action_rate"
            android:icon="@drawable/ic_grade_black_24dp"
            android:orderInCategory="100"
            android:title="@string/action_rate"
            app:showAsAction="never" />
        <item
            android:id="@+id/action_share"
            android:icon="@drawable/ic_share_black_24dp"
            android:orderInCategory="101"
            android:title="@string/action_share"
            app:showAsAction="never" />
        <item
            android:id="@+id/action_enquiry"
            android:icon="@drawable/ic_message_black_24dp"
            android:orderInCategory="102"
            android:title="@string/action_enquiry"
            app:showAsAction="never" />
        <item
            android:id="@+id/action_disclaimer"
            android:icon="@drawable/ic_info_black_24dp"
            android:orderInCategory="103"
            android:title="@string/action_disclaimer"
            app:showAsAction="never" />
    </menu>
</item>

试试这个

 MenuPopupHelper menuHelper = new MenuPopupHelper(getContext(), (MenuBuilder) 
 popupmenu.getMenu(), button);
 menuHelper.setForceShowIcon(true);
 menuHelper.show();

为我工作。

我创造了这样的东西:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_settings"
        android:icon="@drawable/abc_ic_menu_moreoverflow_mtrl_alpha"
        android:title="@string/action_settings"
        app:showAsAction="always">
        <menu>
            <item
                android:icon="@drawable/ic_event"
                android:title="@string/action_settings"
                app:showAsAction="always" />
            <item
                android:icon="@drawable/ic_event"
                android:title="@string/action_settings"
                app:showAsAction="always" />
        </menu>
    </item>
</menu>
@SuppressLint("RestrictedApi")
fun Menu.showIcons() {
    (this as? MenuBuilder)?.setOptionalIconsVisible(true)
}
它基本上可以在任何菜单上使用


对于工具栏,您可以在activity或fragment中覆盖PrepareOptions功能表上的
,在调用
super
之前,只需调用
菜单。showIcons()
,或者您可以将其与
弹出菜单一起使用,就像这样
弹出菜单(requireContext(),anchor)。menu.showIcons()
我创建了这样的东西: 试试这个:

    Menu menu= toolbar.getMenu();
    Method menuMethod = null;
    try {
       menuMethod = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
       menuMethod.setAccessible(true);
       menuMethod.invoke(menu, true);
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }

谢谢你,哈利。如果我把它作为我的一个项目的子菜单添加,我会得到一个“中间”菜单。我需要它作为溢出打开。看快照,这是你想要的吗?是的。我需要这个打开一旦你点击溢出按钮(三个垂直点)。这就是我给你看的,这是我给你的代码输出。正确地按照它来做。你的菜单右上角是正确的。但如果用户点击设备菜单按钮,它将不起作用。知道吗?我不知道你为什么没有得到更多的选票。这是唯一对我有效的解决方案,也是最简单的。