Android 上下文菜单上的图标未显示?

Android 上下文菜单上的图标未显示?,android,android-layout,android-contextmenu,Android,Android Layout,Android Contextmenu,当我长时间单击recyclerview项目时,关联菜单只显示文本,而不显示相关图标,代码如下: <?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" xmlns:tools="http://s

当我长时间单击recyclerview项目时,关联菜单只显示文本,而不显示相关图标,代码如下:

    <?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"
    xmlns:tools="http://schemas.android.com/tools">

    <item
        android:id="@+id/bookmark"
        android:orderInCategory="1"
        android:title="@string/bookmarked_ayah"
        android:icon="@drawable/ic_bookmark" />
    <item
        android:id="@+id/fbshare"
        android:orderInCategory="2"
        android:title="@string/fb_share"
        android:icon="@drawable/ic_facebookshare" />
    <item
        android:id="@+id/saveayah"
        android:orderInCategory="3"
        android:title="@string/save_ayah"
        android:icon="@drawable/ic_save" />
    </menu>

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

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

        return true;
    }
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    try {
        Field field = menu.getClass().getDeclaredField("mOptionalIconsVisible");
        field.setAccessible(true);
        field.setBoolean(menu, true);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return super.onPrepareOptionsMenu(menu);
}

@凌驾
公共布尔onCreateOptions菜单(菜单){
MenuInflater充气机=getMenuInflater();
充气器。充气(右菜单。ayah_保存动作栏项目,菜单);
返回true;
}

如果您在Android 3.0+上运行代码,则菜单中的图标不会按设计显示。这是谷歌的设计决定

但如果您确实想显示图标,可以使用以下代码:

    <?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"
    xmlns:tools="http://schemas.android.com/tools">

    <item
        android:id="@+id/bookmark"
        android:orderInCategory="1"
        android:title="@string/bookmarked_ayah"
        android:icon="@drawable/ic_bookmark" />
    <item
        android:id="@+id/fbshare"
        android:orderInCategory="2"
        android:title="@string/fb_share"
        android:icon="@drawable/ic_facebookshare" />
    <item
        android:id="@+id/saveayah"
        android:orderInCategory="3"
        android:title="@string/save_ayah"
        android:icon="@drawable/ic_save" />
    </menu>

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

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

        return true;
    }
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    try {
        Field field = menu.getClass().getDeclaredField("mOptionalIconsVisible");
        field.setAccessible(true);
        field.setBoolean(menu, true);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return super.onPrepareOptionsMenu(menu);
}
它使用反射并将图标设置为可见。我进行了测试,结果如下:


如果您在Android 3.0+上运行代码,则菜单中的图标不会按设计显示。这是谷歌的设计决定

但如果您确实想显示图标,可以使用以下代码:

    <?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"
    xmlns:tools="http://schemas.android.com/tools">

    <item
        android:id="@+id/bookmark"
        android:orderInCategory="1"
        android:title="@string/bookmarked_ayah"
        android:icon="@drawable/ic_bookmark" />
    <item
        android:id="@+id/fbshare"
        android:orderInCategory="2"
        android:title="@string/fb_share"
        android:icon="@drawable/ic_facebookshare" />
    <item
        android:id="@+id/saveayah"
        android:orderInCategory="3"
        android:title="@string/save_ayah"
        android:icon="@drawable/ic_save" />
    </menu>

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

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

        return true;
    }
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    try {
        Field field = menu.getClass().getDeclaredField("mOptionalIconsVisible");
        field.setAccessible(true);
        field.setBoolean(menu, true);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return super.onPrepareOptionsMenu(menu);
}
它使用反射并将图标设置为可见。我进行了测试,结果如下:


上下文菜单不再经常使用,但我从来没有记得它们支持图标。如果你看到的应用程序提供了带有图标的上下文菜单,我猜它们不是在使用Android菜单框架,而是在显示自己的UI。上下文菜单不再经常使用,但我从来没有记得它们支持图标。如果你看到的应用程序提供了一个带有图标的上下文菜单,我猜他们不是在使用Android菜单框架,而是在显示自己的UI。