我想在工具栏中显示一个溢出菜单(AppCompat-v7:22.1.1),下面是我的 menu_main.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/action_search"
android:title="@string/action_search"
android:icon="@mipmap/ic_menu_search"
androidrderInCategory="100"
android:actionViewClass="android.widget.SearchView"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_group_chat"
android:title="@string/menu_group_chat"
android:icon="@mipmap/ic_menu_groupchat" />
<item
android:id="@+id/menu_add_friend"
android:title="@string/menu_add_friend"
android:icon="@mipmap/ic_menu_add_friend" />
运行我的应用程序后,菜单项的图标没有显示,然后我尝试了这个solution ,在我的Activty中添加一个覆盖方法onMenuOpened() (扩展自AppCompatActivity ),
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if(menu!=null){
if(menu.getClass().getSimpleName().equals("MenuBuilder")){
try {
Method m = menu.getClass().getDeclaredMethod(
"setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return super.onMenuOpened(featureId, menu);
}
但是运行这个demo后,发现图标还是没有显示出来。
从此reported issue ,我知道 AppCompatActivity.onMenuOpened 在 22.x 中不再调用,但奇怪的是,当我在 Genymotion 中单击硬件菜单键时,菜单出现在底部并带有图标,
关闭菜单后,我再次点击工具栏中的溢出按钮,菜单中出现这些图标,
多么奇怪啊!为什么会这样?
Best Answer-推荐答案
对于 AppCompactActivity 您可以将此检查放在 onPrepareOptionsPanel() 上。
@Override
protected boolean onPrepareOptionsPanel(View view, Menu menu) {
if (menu != null) {
if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
try {
Method m = menu.getClass().getDeclaredMethod(
"setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
} catch (Exception e) {
Log.e(getClass().getSimpleName(), "onMenuOpened...unable to set icons for overflow menu", e);
}
}
}
return super.onPrepareOptionsPanel(view, menu);
}
关于android - 在工具栏溢出菜单中显示菜单项图标时,这种奇怪的情况是如何发生的?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/30076392/
|