android4.0及以上默认icon是不显示的。
1.OptionsMenu有2种办法使icon显示
a .子菜单中的menu图片可以显示
<?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"> <item android:title="" android:icon="@mipmap/ic_launcher" app:showAsAction="always"> (v7包) <menu > <item android:title="黄色" android:icon="@mipmap/ic_launcher" android:id="@+id/yello" /> <item android:id="@+id/red" android:icon="@mipmap/ic_launcher" android:title="红色"/> <item android:title="绿色" android:icon="@mipmap/ic_launcher" android:id="@+id/green"/> </menu> </item> </menu>b .在设置menu的activity中添加如下代码
private void setIconEnable(Menu menu, boolean enable) { try { Class<?> clazz = Class.forName("com.android.internal.view.menu.MenuBuilder"); Method m = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class); m.setAccessible(true); //MenuBuilder实现Menu接口,创建菜单时,传进来的menu其实就是MenuBuilder对象(java的多态特征) m.invoke(menu, enable); } catch (Exception e) { e.printStackTrace(); } }在 onCreateOptionsMenu( Menu menu )使用 setIconEnable(menu, true )
2.ContextMenu使icon显示
同1.b 在onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)使用setIconEnable(menu, true)
3.PopupMenu使icon显示
@Override public void onClick(View view) { PopupMenu popupMenu=new PopupMenu(MainActivity.this,view); getMenuInflater().inflate(R.menu.pop_menu,popupMenu.getMenu()); popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { int id=item.getItemId(); switch (id){ case R.id.pop_1: Toast.makeText(MainActivity.this,"泡泡糖one",Toast.LENGTH_SHORT).show(); break; case R.id.pop_2: Toast.makeText(MainActivity.this,"泡泡糖two",Toast.LENGTH_SHORT).show(); break; } return false; } }); try { //popupmenu显示icon的关键 Field mpopup=popupMenu.getClass().getDeclaredField("mPopup"); mpopup.setAccessible(true); MenuPopupHelper mPopup = (MenuPopupHelper) mpopup.get(popupMenu); mPopup.setForceShowIcon(true); } catch (Exception e) { } popupMenu.show(); }
2.
ContextMenu
有2种办法使icon显示