Как установить цвет значка 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"/>
но когда я запускаю приложение, я получаю другой черный значок share. Как установить значок share, чтобы быть белым?
7 ответов
это тематическая проблема. В зависимости от текущей темы вам нужно установить правильную тему наложения ActionBar. Поставщик действий считывает значение в теме (которое указывает, является ли тема темной или светлой), чтобы определить цвет значка.
Если ваша основная тема светлая, а панель действий темная, ваша панель действий / панель инструментов должна использовать тему ThemeOverlay.AppCompat.Dark.ActionBar
.
значок фактически представленную ShareActionProvider
и вы не можете изменить его afaik. Однако вы можете настроить цвет, установив textColorPrimary
в своем стили.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;
}
попробуйте это :
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;
}
добавить 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"/>
это поведение ожидается, как ShareActionProvider
is
ответственность за создание представлений, которые позволяют обмениваться данными, а также показать подменю с действиями общего доступа, если размещен элемент размещения в меню переполнения.
по данным в документации.
это означает, что у вас нет контроля над настройкой представления при его использовании.
@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);
}
}
Я библиотека для достижения этого меню:
взгляните на мое репозиторий Github: https://github.com/lalongooo/permutas-sep/blob/master/app/src/main/java/com/permutassep/ui/ActivityMain.java#L171