如何设置MenuItem的图标颜色?

时间:2015-08-11 23:09:58

标签: 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"/>

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

以下是我的结果

enter image description here

9 个答案:

答案 0 :(得分:61)

该图标实际上由ShareActionProvider提供,您无法将其更改为afaik。但是,您可以通过在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;
}

答案 1 :(得分:39)

这是一个主题问题。根据您当前的主题,您需要设置正确的ActionBar叠加主题。 Action Provider读取主题中的值(表示主题是暗还是亮)以确定图标的颜色。

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

答案 2 :(得分:28)

试试这个:

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;
}       

答案 3 :(得分:16)

短而甜蜜的答案 - &gt;应用程式:iconTint =“@颜色/ 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"/>

答案 4 :(得分:2)

菜单中图标的颜色可以在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>

enter image description here

答案 5 :(得分:1)

@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);
    }
}

答案 6 :(得分:1)

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

答案 7 :(得分:0)

此行为是预期的,因为ShareActionProvider

  

负责创建支持数据共享的视图   如果放置了托管项目,则显示具有共享活动的子菜单   在溢出菜单上。

根据to the documentation.

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

答案 8 :(得分:0)

 app:iconTint="@color/colorWhite" 

将此添加到导航视图属性中

Ex-

<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"/>

将所有所有菜单项图标添加到您提供的颜色中。