如何设置MenuItem的图标颜色?

我定义了一个具有ShareActionProvider的菜单项并共享白色图标,如下所示:

<item android:icon="@drawable/ic_share_white_24dp" android:id="@+id/action_share" android:title="@string/action_share" android:orderInCategory="200" app:showAsAction="ifRoom" app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/> 

但是当我启动应用程序,我得到一个不同的黑色分享图标。 如何将共享图标设置为白色?

这是我的结果 在这里输入图像说明

Solutions Collecting From Web of "如何设置MenuItem的图标颜色?"

这是一个主题问题。 根据您当前的主题,您需要设置正确的ActionBar叠加主题。 操作提供程序读取主题中的值(指示主题是黑暗还是亮),以确定图标的颜色。

如果您的主要主题是浅色,而您的ActionBar是黑暗的,则您的ActionBar /工具栏必须使用主题ThemeOverlay.AppCompat.Dark.ActionBar

这个图标实际上是由ShareActionProvider提供的,你不能修改它。 但是,您可以通过在styles.xml中设置textColorPrimary来自定义颜色:

 <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:theme="@style/MyActionBarTheme" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> 

 <style name="MyActionBarTheme" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> <item name="android:textColorPrimary">#fa0</item> </style> 

对于任何自定义图标,你必须自己着色,即。

 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); for(int i = 0; i < menu.size(); i++){ Drawable drawable = menu.getItem(i).getIcon(); if(drawable != null) { drawable.mutate(); drawable.setColorFilter(getResources().getColor(R.color.textColorPrimary), PorterDuff.Mode.SRC_ATOP); } } return true; } 

尝试这个 :

 public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.MENU, menu); // change color for icon 0 Drawable yourdrawable = menu.getItem(0).getIcon(); // change 0 with 1,2 ... yourdrawable.mutate(); yourdrawable.setColorFilter(getResources().getColor(R.color.white), PorterDuff.Mode.SRC_IN); return true; } 

ShareActionProvider一样,此行为也是预期的

负责创build视图以启用数据共享,并在托pipe项目放置在溢出菜单上时显示具有共享活动的子菜单。

根据文件。

这意味着您在使用视图时无法控制视图的自定义。

我用这个库来实现这个菜单:

在这里输入图像说明

看看我的Github回购: https : //github.com/lalongooo/permutas-sep/blob/master/app/src/main/java/com/permutassep/ui/ActivityMain.java#L171