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"/>
しかし、アプリケーションを起動すると、別の黒い共有アイコンが表示されます。共有アイコンを白に設定する方法は?
ここに私が持っている結果があります
これはテーマの問題です。現在のテーマに応じて、正しいActionBarオーバーレイテーマを設定する必要があります。アクションプロバイダーは、テーマの値(テーマが暗いか明るいかを示す)を読み取り、アイコンの色を決定します。
メインテーマが明るく、ActionBarが暗い場合、ActionBar/ToolbarはテーマThemeOverlay.AppCompat.Dark.ActionBar
を使用する必要があります。
アイコンは、実際には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;
}
これを試して :
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;
}
アイコンの色を変更するには、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"
と書いてください。
@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);
}
}
ShareActionProvider
は
データ共有を可能にするビューの作成を担当します。また、ホスティングアイテムがオーバーフローメニューに配置されている場合、共有アクティビティを含むサブメニューを表示します。
これは、ビューを使用するときに、ビューのカスタマイズを制御できないことを意味します。