如何设置菜单项的图标的颜色?

问题描述 投票:35回答:7

我定义了具有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

android menuitem
7个回答
39
投票

这是一个主题化的问题。根据当前的主题,你需要设置正确的动作条覆盖的主题。该行动提供读取该主题的值(其指示如果主题太暗或太亮),以确定该图标的颜色。

如果你的主题是光,你的动作条是黑暗的,你的动作条/工具栏必须使用主题ThemeOverlay.AppCompat.Dark.ActionBar


66
投票

图标实际上是由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;
}

31
投票

尝试这个 :

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

20
投票

Short and Sweet Answer--> 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"/>

2
投票

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


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

0
投票

这是正常现象,因为ShareActionProvider

负责创建视图使数据共享,并展示与分享活动的子菜单,如果托管项目被放置在溢出菜单上。

根据to the documentation.

这意味着,使用它时,你没有对视图的定制控制。

© www.soinside.com 2019 - 2024. All rights reserved.