如何设置MenuItem的图标颜色?
How to set icon color of 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"/>
但是当我启动该应用程序时,我看到一个不同的黑色共享图标。如何设置分享图标为白色?
这是我得到的结果
此行为是预期的,因为 ShareActionProvider
是
responsible for creating views that enable data sharing and also to
show a sub menu with sharing activities if the hosting item is placed
on the overflow menu.
这意味着您在使用视图时无法控制视图的自定义。
该图标实际上是由 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;
}
这是一个主题问题。根据您当前的主题,您需要设置正确的 ActionBar 覆盖主题。 Action Provider 读取主题中的一个值(指示主题是深色还是浅色)来确定图标的颜色。
如果您的主主题是浅色而您的 ActionBar 是深色,您的 ActionBar/Toolbar 必须使用主题 ThemeOverlay.AppCompat.Dark.ActionBar
。
试试这个:
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;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) {
menuInflater.inflate(R.menu.menu_confirm, menu);
MenuItem action_done = menu.findItem(R.id.action_done);
action_done.setIcon(R.drawable.ic_filter);
Utils.menuIconColor(action_done, Color.WHITE);
super.onCreateOptionsMenu(menu, menuInflater);
}
public static void menuIconColor(MenuItem menuItem, int color) {
Drawable drawable = menuItem.getIcon();
if (drawable != null) {
drawable.mutate();
drawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
}
}
简短而甜蜜的答案--> app:iconTint="@color/yourcolor
在您的 MenuItem
中添加 app:iconTint="@color/yourcolor"
以更改图标颜色。
<item
android:icon="@drawable/ic_share_white_24dp"
android:id="@+id/action_share"
android:title="@string/action_share"
android:orderInCategory="200"
app:iconTint="@color/yourcolor"
app:showAsAction="ifRoom"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>
简答 --> 使用 app:iconTint="?android:textColorPrimary"
如果您希望图标颜色为白色,请写:
android:theme = "@style/ThemeOverlay.MaterialComponents.Dark.ActionBar"
否则如果你想要黑色,写:
android:theme="@style/ThemeOverlay.MaterialComponents.Light"
到您的工具栏
菜单中的图标颜色可以在 Layout/activity_main 中更改。xml
在此标签内设置此行 app:itemIconTint="@color/red_warning com.google.android.material.navigation.NavigationView
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
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"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer"
app:itemIconTint="@color/red_warning"
/>
</androidx.drawerlayout.widget.DrawerLayout>
app:iconTint="@color/colorWhite"
在导航视图属性中添加这个
例如-
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@color/main_color"
app:itemBackground="@drawable/divider_menu_items"
app:itemTextColor="@color/colorWhite"
app:itemIconTint="@color/colorWhite"
app:menu="@menu/activity_main_drawer"/>
添加此所有菜单项图标将转换为您指定的颜色。
我定义了一个菜单项,它有 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"/>
但是当我启动该应用程序时,我看到一个不同的黑色共享图标。如何设置分享图标为白色?
这是我得到的结果
此行为是预期的,因为 ShareActionProvider
是
responsible for creating views that enable data sharing and also to show a sub menu with sharing activities if the hosting item is placed on the overflow menu.
这意味着您在使用视图时无法控制视图的自定义。
该图标实际上是由 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;
}
这是一个主题问题。根据您当前的主题,您需要设置正确的 ActionBar 覆盖主题。 Action Provider 读取主题中的一个值(指示主题是深色还是浅色)来确定图标的颜色。
如果您的主主题是浅色而您的 ActionBar 是深色,您的 ActionBar/Toolbar 必须使用主题 ThemeOverlay.AppCompat.Dark.ActionBar
。
试试这个:
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;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) {
menuInflater.inflate(R.menu.menu_confirm, menu);
MenuItem action_done = menu.findItem(R.id.action_done);
action_done.setIcon(R.drawable.ic_filter);
Utils.menuIconColor(action_done, Color.WHITE);
super.onCreateOptionsMenu(menu, menuInflater);
}
public static void menuIconColor(MenuItem menuItem, int color) {
Drawable drawable = menuItem.getIcon();
if (drawable != null) {
drawable.mutate();
drawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
}
}
简短而甜蜜的答案--> app:iconTint="@color/yourcolor
在您的 MenuItem
中添加 app:iconTint="@color/yourcolor"
以更改图标颜色。
<item
android:icon="@drawable/ic_share_white_24dp"
android:id="@+id/action_share"
android:title="@string/action_share"
android:orderInCategory="200"
app:iconTint="@color/yourcolor"
app:showAsAction="ifRoom"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>
简答 --> 使用 app:iconTint="?android:textColorPrimary"
如果您希望图标颜色为白色,请写:
android:theme = "@style/ThemeOverlay.MaterialComponents.Dark.ActionBar"
否则如果你想要黑色,写:
android:theme="@style/ThemeOverlay.MaterialComponents.Light"
到您的工具栏
菜单中的图标颜色可以在 Layout/activity_main 中更改。xml
在此标签内设置此行 app:itemIconTint="@color/red_warning com.google.android.material.navigation.NavigationView
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
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"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer"
app:itemIconTint="@color/red_warning"
/>
</androidx.drawerlayout.widget.DrawerLayout>
app:iconTint="@color/colorWhite"
在导航视图属性中添加这个
例如-
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@color/main_color"
app:itemBackground="@drawable/divider_menu_items"
app:itemTextColor="@color/colorWhite"
app:itemIconTint="@color/colorWhite"
app:menu="@menu/activity_main_drawer"/>
添加此所有菜单项图标将转换为您指定的颜色。