如何设置MenuItem的图标颜色?

Dim*_*tri 47 android 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"/>
Run Code Online (Sandbox Code Playgroud)

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

这是我的结果

在此输入图像描述

tac*_*lux 66

该图标实际上是由ShareActionProvider您提供的,您无法将其更改为afaik.但是,您可以通过textColorPrimary在styles.xml中设置颜色来自定义颜色:

<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">
Run Code Online (Sandbox Code Playgroud)
<style name="MyActionBarTheme" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:textColorPrimary">#fa0</item>
</style>
Run Code Online (Sandbox Code Playgroud)

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

@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;
}
Run Code Online (Sandbox Code Playgroud)


Bla*_*der 39

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

如果您的主题很轻且ActionBar很暗,则ActionBar/Toolbar必须使用主题ThemeOverlay.AppCompat.Dark.ActionBar.

  • 确实,你的主题是轻量级,而你正在使用工具栏.您需要在XML布局中的`Toolbar`上指定`android:theme ="@ style/ThemeOverlay.AppCompat.Dark.ActionBar"作为属性.如果您希望在工具栏较暗时工具栏弹出菜单较亮,您还需要添加`app:popupTheme ="@ style/ThemeOverlay.AppCompat.Light"`. (3认同)
  • 这只会改变溢出图标,而不是菜单项的颜色 (2认同)

dru*_*uci 32

试试这个 :

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;
}       
Run Code Online (Sandbox Code Playgroud)


Nik*_*dva 27

短而甜的答案 - > app:iconTint ="@ color/yourcolor

添加app:iconTint="@color/yourcolor"MenuItem的更改图标颜色.

<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"/>
Run Code Online (Sandbox Code Playgroud)

  • @ danny.schimke使用`app:`insted of"android:`"然后它将在26 api以下使用 (12认同)
  • 如果您想从菜单 XML 重新着色,这不是一个坏的解决方案:命名空间应该是 _android:_ 而不是 _app:_ `android:iconTint="@android:color/white"`。重要提示:属性 iconTint 仅在 API 级别 26 及更高级别中使用! (3认同)
  • 没错,app:iconTitle甚至可以在API 26以下运行-谢谢!也许人们会感到困惑,因为在我的IDE中它没有正确显示在预览中,但是在运行时正确地重新着色了!您的解决方案效果很好,不应该被否决! (2认同)

小智 7

菜单中图标的颜色可以在 Layout/activity_main.xml 中更改

在此标记 com.google.android.material.navigation.NavigationView 内设置此行app:itemIconTint="@color/red_warning

    <?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>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


小智 6

简短的答案 -->app:iconTint="?android:textColorPrimary" 如果您希望图标颜色为白色,请使用: android:theme = "@style/ThemeOverlay.MaterialComponents.Dark.ActionBar" 否则,如果您想要黑色,请写入: android:theme="@style/ThemeOverlay.MaterialComponents.Light" 到工具栏