菜单中不显示图标
icon not display in 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=".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_star_half_24dp"
,但是没有显示菜单标题
如果您的预期行为是在 toolbar
上显示图标
app:showAsAction="never"
应改为 ifRoom
或 always
。
如果您想在 overflow menu
上显示 icon
,则需要自定义 menu item
并改用弹出窗口 window。
试试这个,
<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>
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();
我想在 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_star_half_24dp"
,但是没有显示菜单标题
如果您的预期行为是在 toolbar
app:showAsAction="never"
应改为 ifRoom
或 always
。
如果您想在 overflow menu
上显示 icon
,则需要自定义 menu item
并改用弹出窗口 window。
试试这个,
<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>
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();