web-dev-qa-db-ja.com

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

45
Dimitri

これはテーマの問題です。現在のテーマに応じて、正しいActionBarオーバーレイテーマを設定する必要があります。アクションプロバイダーは、テーマの値(テーマが暗いか明るいかを示す)を読み取り、アイコンの色を決定します。

メインテーマが明るく、ActionBarが暗い場合、ActionBar/ToolbarはテーマThemeOverlay.AppCompat.Dark.ActionBarを使用する必要があります。

39
BladeCoder

アイコンは、実際には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;
}
64
tachyonflux

これを試して :

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

短くて甘い答え-> app:iconTint = "@ color/yourcolor

アイコンの色を変更するには、MenuItemapp: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"/>
20
Nikunj Paradva

短い答え->アイコンの色を白にしたい場合はapp:iconTint="?android:textColorPrimary"を使用してください。そうでない場合はAndroid:theme = "@style/ThemeOverlay.MaterialComponents.Dark.ActionBar"を書き、ツールバーにAndroid:theme="@style/ThemeOverlay.MaterialComponents.Light"と書いてください。

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

ShareActionProvider

データ共有を可能にするビューの作成を担当します。また、ホスティングアイテムがオーバーフローメニューに配置されている場合、共有アクティビティを含むサブメニューを表示します。

ドキュメントによる

これは、ビューを使用するときに、ビューのカスタマイズを制御できないことを意味します。

0
Robert Estivill