Как установить цвет значка 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]()
Ответы
Ответ 1
Это тематическая проблема. В зависимости от текущей темы вам необходимо установить правильную тему оверлей ActionBar. Поставщик действий читает значение в теме (которое указывает, является ли тема темной или легкой), чтобы определить цвет значка.
Если ваша основная тема светлая, а ваш ActionBar темный, ваша панель ActionBar/Toolbar должна использовать тему ThemeOverlay.AppCompat.Dark.ActionBar
.
Ответ 2
Значок фактически предоставляется 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">
<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;
}
Ответ 3
попробуйте следующее:
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;
}
Ответ 4
Коротко и сладко 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"/>
Ответ 5
короткий ответ → используйте app:iconTint="?android:textColorPrimary"
если вы хотите, чтобы цвет значка был белым, напишите: android:theme = "@style/ThemeOverlay.MaterialComponents.Dark.ActionBar"
если хотите черный цвет, напишите: android:theme="@style/ThemeOverlay.MaterialComponents.Light"
на панель инструментов
Ответ 6
Ожидается такое поведение, поскольку ShareActionProvider
ответственный за создание представлений, которые обеспечивают совместное использование данных, а также показать подменю с активными действиями при размещении хостинга в меню переполнения.
в соответствии с к документации.
Это означает, что вы не контролируете настройку представления при его использовании.
Ответ 7
@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);
}
}
Ответ 8
Я использовал эту библиотеку для достижения этого меню:
![введите описание изображения здесь]()
Взгляните на мой репозиторий Github: https://github.com/lalongooo/permutas-sep/blob/master/app/src/main/java/com/permutassep/ui/ActivityMain.java#L171