我设法在工具栏的溢出菜单和子菜单中显示图标,但找不到如何根据图标的位置对其进行着色的方法.这是我正在使用的代码:
@OverrIDepublic boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.toolbar_main, menu); // Show icons in overflow menu if (menu instanceof MenuBuilder) { MenuBuilder m = (MenuBuilder) menu; m.setoptionaliconsVisible(true); } // Change icons color changeIconscolor(menu, colornormal, colorInMenu, false); return super.onCreateOptionsMenu(menu);}public static voID changeIconscolor(Menu menu, int colornormal, int colorInMenu, boolean isInSubMenu) { // Change icons color for (int i = 0; i < menu.size(); i++) { MenuItem item = menu.getItem(i); Drawable icon = item.getIcon(); if (icon != null) { int color = (((MenuItemImpl) item).requiresActionbutton() ? colornormal : colorInMenu); icon.setcolorFilter(color, PorterDuff.Mode.SRC_IN); icon.setAlpha(item.isEnabled() ? 255 : 128); } if (item.hasSubMenu()) { changeIconscolor(item.getSubMenu(), colornormal, colorInMenu, true); } }}
使用MenuItem.requiresActionbutton()可以知道某个项目在XML的showAsAction属性中是否具有从不或始终具有值,但不知道其是否具有ifRoom值.因此,如果我想要适当的着色,则不能在项目中使用ifRoom值,这是非常严格的.
>是否有一种方法可以在所有情况下正确着色菜单项?
>更重要的是,是否有一种内置的方法可以为主题或样式着色项,从而使我不必使用此复杂代码?即使解决方案不包含溢出菜单中的图标,我也想知道.
如果没有其他方法,我会很好地使用反射.
解决方法:
不幸的是,无法使用主题或样式来设置菜单项图标颜色的色调.您需要一种方法来检查MenuItem在Actionbar或溢出菜单中是否可见.本机和支持MenuItemImpl类都具有用于此目的的方法,但它们仅限于库或隐藏.这需要反思.您可以使用以下方法检查菜单项是否可见,然后设置滤色器:
public static boolean isActionbutton(@NonNull MenuItem item) { if (item instanceof MenuItemImpl) { return ((MenuItemImpl) item).isActionbutton(); } else { // Not using the support library. This is a native MenuItem. Reflection is needed. try { Method m = item.getClass().getDeclaredMethod("isActionbutton"); if (!m.isAccessible()) m.setAccessible(true); return (boolean) m.invoke(item); } catch (Exception e) { return false; } }}
您还需要等到菜单膨胀后再对项目进行着色.为此,您可以获取对Actionbar的引用,并在绘制Actionbar之后给MenuItem着色.
例:
@OverrIDe public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); int ID = getResources().getIDentifIEr("action_bar", "ID", "androID"); VIEwGroup actionbar; if (ID != 0) { actionbar = (VIEwGroup) findVIEwByID(ID); } else { // You must be using a custom Toolbar. Use the toolbar vIEw instead. // actionbar = yourToolbar } actionbar.post(new Runnable() { @OverrIDe public voID run() { // Add code to tint menu items here } }); return super.onCreateOptionsMenu(menu);}
这是我编写的帮助为菜单项图标着色的课程:https://gist.github.com/jaredrummler/7816b13fcd5fe1ac61cb0173a1878d4f
总结以上是内存溢出为你收集整理的android-溢出菜单和子菜单中的色调菜单图标全部内容,希望文章能够帮你解决android-溢出菜单和子菜单中的色调菜单图标所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)