Можно ли изменить цвет кнопки переполнения (3 вертикальных точки) на панели действий? Если да, то как мы это делаем? Я не нашел стиль для кнопки переполнения.
Спасибо
Можно ли изменить цвет кнопки переполнения (3 вертикальных точки) на панели действий? Если да, то как мы это делаем? Я не нашел стиль для кнопки переполнения.
Спасибо
Вы можете изменить изображение, используемое для него, используя следующую декларацию стиля.
<style name="MyCustomTheme" parent="style/Theme.Holo">
<item name="android:actionOverflowButtonStyle">@style/MyCustomTheme.OverFlow</item>
</style>
<style name="MyCustomTheme.OverFlow">
<item name="android:src">@drawable/my_overflow_image</item>
</style>
И если вы используете ActionBarSherlock, вот как это сделать
<style name="MyCustomTheme" parent="style/Theme.Sherlock">
<item name="android:actionOverflowButtonStyle">@style/MyCustomTheme.OverFlow</item>
<item name="actionOverflowButtonStyle">@style/MyCustomTheme.OverFlow</item>
</style>
<style name="MyCustomTheme.OverFlow">
<item name="android:src">@drawable/my_overflow_image</item>
</style>
Ответ XGouchet отличный, но просто хотел добавить, что если вы наследуете существующий стиль, вы получите стандартное дополнение, выбранное состояние и т.д.
<style name="MyCustomTheme.OverFlow" parent="Widget.Sherlock.ActionButton.Overflow">
<item name="android:src">@drawable/title_moreicon</item>
</style>
Некоторые из этих ответов являются серьезными излишествами, а некоторые дают ограниченные результаты. Ответ намного проще. Вы можете установить его в любой цвет, который вы хотите, в любое время. Вот:
toolbar.getOverflowIcon().setColorFilter(colorInt, PorterDuff.Mode.SRC_ATOP);
Создайте этот метод:
public static void setOverflowButtonColor(final Activity activity, final int color) {
final String overflowDescription = activity.getString(R.string.abc_action_menu_overflow_description);
final ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
final ViewTreeObserver viewTreeObserver = decorView.getViewTreeObserver();
viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
final ArrayList<View> outViews = new ArrayList<View>();
decorView.findViewsWithText(outViews, overflowDescription, View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION);
if (outViews.isEmpty()) {
return;
}
AppCompatImageView overflow = (AppCompatImageView) outViews.get(0);
overflow.setColorFilter(color);
removeOnGlobalLayoutListener(decorView, this);
}
});
}
а затем вызовите его следующим образом:
setOverflowButtonColor(this, getResources().getColor(R.color.hot_pink));
Если вы используете AppCompat, вы можете получить новый пользовательский стиль с атрибутом android:textColorSecondary
, установленным на необходимый цвет, и использовать его в качестве темы для вашей панели инструментов.
Android: изменение цвета текста и цвета переполнения панели инструментов
Другой программный вариант:
Drawable drawable = toolbar.getOverflowIcon();
if(drawable != null) {
drawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(drawable.mutate(), getResources().getColor(R.color.thecolor));
toolbar.setOverflowIcon(drawable);
}
Надеюсь, что это поможет!
Помещение изображений - отличная идея, потому что, если вы можете изменить его, изменив цвета, тогда вам не нужно использовать дополнительное изображение.
Точки меню выбирают цвет из textColorPrimary, поэтому вместо написания нескольких строк эта одна строка
<item name="android:textColorPrimary">@android:color/white</item>
исправит вашу проблему.
Только небольшая проблема заключается в том, что этот цвет будет применяться и к цвету текста вашего меню переполнения, а также к множеству других мест:)
<style name="MyCustomTheme" parent="@style/Theme.AppCompat.Light">
<item name="actionOverflowButtonStyle">@style/OverflowMenuButtonStyle</item>
</style>
<style name="OverflowMenuButtonStyle" parent="Widget.AppCompat.ActionButton.Overflow">
<item name="android:src">@drawable/quantum_ic_more_vert_white_24</item>
</style>
Обратите внимание, что это отличается от ответа XGouchet, удалив пространство имен android. Ответ XGouchet работает только для Lollipop и более высоких устройств, в то время как мои работы работают для всех устройств API 7+.
ref: Пользовательская тема AppCompat не меняет значок переполнения на старых устройствах
Если вы используете последнюю панель инструментов, вам нужно поместить инструкцию в styles.xml, как показано в следующем коде:
<style name="AppToolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:textColorPrimary">@android:color/white</item>
<item name="android:textColorSecondary">@android:color/black</item>
</style>
просто добавьте эту строку в свой выбранный стиль в файле style.xma
<item name="colorControlNormal">@color/white</item>
его рабочий штраф. если вы используете
<item name="textColorSecondary">@color/white</item>
то ваши другие предметы, такие как цвет и радио-кнопки меню навигации курсора, будут затронуты
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.dashboard, menu); // dashboard is xml file name
Drawable drawable = menu.findItem(R.id.lan).getIcon();
if (drawable != null) {
drawable.mutate();
drawable.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP);
}
return true;
}
Это работает для меня, и я нашел это отсюда
Это правильный способ сделать это. Он изменит цвет всех значков управления панелью действий по умолчанию по вашему выбору, включая кнопку "Назад" и кнопку действия меню переполнения.
Для изменения цвета значка переполнения, вы можете просто добавить
toolbar.setOverflowicon(getDrawable)