Как изменить цвет фона ActionMode в Android
Я создаю приложение для Android, в котором уровень поддержки API равен 7, поэтому я использую панель действий Шерлока. Я использую режим действия в нем.
Проблема в том, что я хочу изменить фон режима действия. Итак, я попробовал
<item name="android:background">@color/something</item>
<item name="android:backgroundStacked">@color/something</item>
<item name="android:backgroundSplit">@color/something</item>
Это стилевое решение доступно, но ни одно из них не работает.
Ответы
Ответ 1
если вы хотите изменить цвет ActionBar, просто выполните это:
ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable("COLOR"));
см. ссылку для получения дополнительной информации
и если вы используете ActionMode Это стиль, используемый для любого ActionMode. Вам нужно будет создать свой собственный стиль, чтобы настроить его
<style name="Widget.ActionMode">
<item name="android:background">?android:attr/actionModeBackground</item>
<item name="android:backgroundSplit">?android:attr/actionModeSplitBackground</item>
<item name="android:height">?android:attr/actionBarSize</item>
<item name="android:titleTextStyle">@android:style/TextAppearance.Widget.ActionMode.Title</item>
<item name="android:subtitleTextStyle">@android:style/TextAppearance.Widget.ActionMode.Subtitle</item>
</style>
Дополнительная информация в этом сайте
см. этот тоже
Edit
для pre-Honeycomb см. this please
возможно этот или этот помог вам
Ответ 2
В моем случае я решил с этим. Сначала я создал стиль для определения actionModeBackground:
<style name="MyTheme.ActionMode" parent="@android:style/Theme.Holo.Light">
<item name="android:actionModeBackground">#FFFFFF</item>
</style>
Затем добавьте стиль в мою базовую тему приложения:
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:actionModeStyle">@style/MyTheme.ActionMode</item>
</style>
Надеюсь, это поможет!!!
Ответ 3
Если вы используете простую панель действий, попробуйте это,
ActionBar abar = getActionBar();
abar.setBackgroundDrawable(new ColorDrawable(0xff123456));
Но если вы используете блокировку совместного использования ActiveBub Lib, попробуйте это
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0xff123456));
ColorDrawable(0xff123456)
- должен быть вашим цветовым кодом.
Drawable/styles.xml
<item name="android:actionModeBackground">@drawable/actionbar_background</item>
<item name="actionModeBackground">@drawable/actionbar_background</item>
Изменить тему по уровню API
Если вы хотите изменить в соответствии с уровнем API, тогда вы должны пойти на это
Ответ 4
Если вы хотите сделать это программно (поддерживая AppCompat), вам нужно искать родительский вид значка. Этот код проверяется с 2.3.7 по 6.0.1. Вам нужно проверить более низкий API....
сначала получите представление вида деятельности
final ViewGroup decorView = (ViewGroup) getActivity().getWindow().getDecorView();
второй установите цвет в onPrepareActionMode. Вы также можете установить значок назад или другие элементы здесь
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu)
{
decorView.postDelayed(new Runnable() {
@Override
public void run()
{
int buttonId = getResources().getIdentifier("action_mode_close_button", "id", "android");
View v = decorView.findViewById(buttonId);
if (v == null)
{
buttonId = R.id.action_mode_close_button;
v = decorView.findViewById(buttonId);
}
if (v != null)
{
((View)v.getParent()).setBackgroundColor(Color.red /*your color here*/);
}
}
}, 500);}
Ответ 5
Отмените этот стиль в своей настраиваемой теме:
<style name="Base.Widget.AppCompat.ActionMode" parent="">
<item name="background">?attr/actionModeBackground</item>
<item name="backgroundSplit">?attr/actionModeSplitBackground</item>
<item name="height">?attr/actionBarSize</item>
<item name="titleTextStyle">@style/TextAppearance.AppCompat.Widget.ActionMode.Title</item>
<item name="subtitleTextStyle">@style/TextAppearance.AppCompat.Widget.ActionMode.Subtitle</item>
<item name="closeItemLayout">@layout/abc_action_mode_close_item_material</item>
</style>
Например:
<style name="LywActionMode" parent="Base.Widget.AppCompat.ActionMode">
<item name="background">@color/lyw_primary_color</item>
<item name="backgroundSplit">@color/lyw_primary_color</item>
</style>
<style name="LywCompatTheme" parent="@style/Theme.AppCompat.Light">
...
<item name="actionModeStyle">@style/LywActionMode</item>
</style>
Ответ 6
Это стиль, используемый для любого ActionMode, я вытащил его из SDK. Вам нужно будет создать свой собственный стиль, чтобы настроить его. Это очень легко сделать. Если вы никогда не делали ничего подобного раньше, вы должны прочитать этот пост по настройке ActionBar. Он объясняет все, что вам нужно знать.
<style name="Widget.ActionMode">
<item name="android:background">?android:attr/actionModeBackground</item>
<item name="android:backgroundSplit">?android:attr/actionModeSplitBackground</item>
<item name="android:height">?android:attr/actionBarSize</item>
<item name="android:titleTextStyle">@android:style/TextAppearance.Widget.ActionMode.Title</item>
<item name="android:subtitleTextStyle">@android:style/TextAppearance.Widget.ActionMode.Subtitle</item>
</style>
Ответ 7
Самый простой способ сделать это
ActionBarContextView actionBar = getWindow().getDecorView().findViewById(R.id.action_mode_bar);
actionBar.setBackgroundColor(WhateverColorYouWant);
Ответ 8
Я хочу сделать более ясным этот ответ. Сначала создайте пользовательский фон "storage_list_header_shape.xml" в вашей папке с рисунком.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<gradient
android:angle="270"
android:startColor="@android:color/holo_orange_light"
android:centerColor="@android:color/holo_orange_dark"
android:endColor="@android:color/holo_orange_light" />
<size android:height="3dp" />
</shape>
Во-вторых, создайте собственный стиль в вашем стиле .xml
<style name="customActionModeTheme" parent="@android:style/Theme.Holo.Light">
<item name="android:actionModeBackground">@drawable/storage_list_header_shape</item>
</style>
В-третьих, вызовите стиль в манифесте.
<activity
android:name="com.javacafe.activities.Main"
android:launchMode="singleTop"
android:screenOrientation="sensorLandscape"
android:theme="@style/customActionModeTheme" >
</activity>
Ответ 9
Для тех, кто все еще борется, и ни одно из существующих решений не помогает, убедитесь, что в вашем макете с панелью инструментов у вас есть следующее:
app:popupTheme="@style/Theme.ToolBar"
android:popupTheme="@style/Theme.ToolBar"
и у вас нет
app:theme="@style/Theme.ToolBar"
Поскольку они вызовут конфликт, и ваша настройка не будет работать.