Android 图标不显示在菜单中

Android 图标不显示在菜单中,android,android-menu,Android,Android Menu,我想在android中添加带有菜单标题的图标,但它不带标题显示。下面是我的menu.xml代码 <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=".MainActivit

我想在android中添加带有菜单标题的图标,但它不带标题显示。下面是我的menu.xml代码

<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/rate_app"
    android:title="Rate App"
    android:orderInCategory="100"
    app:showAsAction="never"
    app:icon="@drawable/ic_star_half_24dp"/>


我还使用了
android:icon=“@drawable/ic\u star\u half\u 24dp”
,但如果您的预期行为是在
工具栏上显示图标,则不会显示菜单标题

app:showAsAction=“never”
应更改为
ifRoom
始终

如果要在
溢出菜单上显示
图标
,则需要自定义
菜单项
,并改用弹出窗口。

试试这个

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

 <item
    android:id="@+id/A"
    android:icon="@drawable/ic_a"
    android:title="Name A"
    app:showAsAction="always"/>
 <item
    android:id="@+id/B"
    android:icon="@drawable/ic_b"
    android:title="Name B"
    app:showAsAction="always"/>

      <item
    android:id="@+id/a_More"
    android:icon="@drawable/ic_menu_overflow"
    app:showAsAction="always"
    android:title="More">
    <menu>

        <item 
            android:id="@+id/C"
            android:icon="@drawable/ic_c"
            android:title="Name C"
            app:showAsAction="never" />


        <item 
            android:id="@+id/D"
            android:title="Name D"
            app:showAsAction="never" />

        <item 
            android:id="@+id/E"
            android:icon="@drawable/icon_3"
            android:title="Name E"
            app:showAsAction="never" />    


       </menu>
     </item>
  </menu>

如果您使用的是弹出式菜单,只需复制下面的代码并运行它,您将在弹出式菜单中看到图标
PopupMenu popup=新建PopupMenu(getApplicationContext(),视图);
试一试{
Field[]fields=popup.getClass().getDeclaredFields();
用于(字段:字段){
if(“mPopup.equals(field.getName())){
字段。setAccessible(true);
Object menuPopupHelper=field.get(弹出窗口);
Class CLASSPOPUSCURLPER=Class.forName(menuPopupHelper
.getClass().getName());
方法setForceIcons=classPopucUpCelper.getMethod(
“setForceShowIcon”,boolean.class);
调用(menuPopupHelper,true);
打破
}
}
}捕获(例外e){
e、 printStackTrace();
}
popup.getMenuInflater()
.充气(R.menu.publisher,popup.getMenu());
//向OnMenuItemClickListener注册弹出窗口
setOnMenuItemClickListener(新的PopupMenu.OnMenuItemClickListener(){
公共布尔onMenuItemClick(菜单项){
开关(item.getItemId()){
案例R.id.菜单:
//你的职能
返回true;
违约:
打破
}
返回false;
}
});
popup.show();

将showAsAction值从从不更改
app:icon
更改为
android:icon
将app:showAsAction=“never”更改为app:showAsAction=“always”,请参阅此。我想要溢出菜单上有标题的图标你有正式的证据吗?
If you are using popup menu just copy the below code and run it, you will get icons in popupmenu

PopupMenu popup = new PopupMenu(getApplicationContext(), view);

try {
    Field[] fields = popup.getClass().getDeclaredFields();
    for (Field field : fields) {
        if ("mPopup".equals(field.getName())) {
            field.setAccessible(true);
            Object menuPopupHelper = field.get(popup);
            Class<?> classPopupHelper = Class.forName(menuPopupHelper
                    .getClass().getName());
            Method setForceIcons = classPopupHelper.getMethod(
                    "setForceShowIcon", boolean.class);
            setForceIcons.invoke(menuPopupHelper, true);
            break;
        }
    }
} catch (Exception e) {
    e.printStackTrace();
}

    popup.getMenuInflater()
                    .inflate(R.menu.publisher, popup.getMenu());

                    //registering popup with OnMenuItemClickListener
                    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                        public boolean onMenuItemClick(MenuItem item) {

                            switch (item.getItemId()) {
                            case R.id.menu:
                                //your function
                                return true;
                                                        default:
                                break;
                            }
                            return false;
                        }
                    });
                    popup.show();