Як змінити колір тла ActionBar ActionBarActivity за допомогою XML?


277

Деталі:

Я розширюю ActionBarActivity.
Eclipse та SDK повністю зафіксовані станом на 2011-11-06.

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="14" />  

Розгорнуто на Samsung пристрої з Android 2.3.3
Додаток маєandroid:theme="@android:style/Theme.Light"

Проблема: додаток легкий, але ActionBar синій із сірими значками, навряд чи видно на тлі синього кольору. Я також хочу, щоб ActionBar був світлим, щоб сірі значки були виднішими.

Я спробував змінити стилі, але безрезультатно.
Мені, мабуть, не вистачає чогось тривіального.

Як змінити колір тла ActionBar ActionBarActivity за допомогою XML?


2
Закриваємо цей старий каштан. Вказує на Саннідхі, за популярним попитом, проте відповіді на це питання охоплюють досить багато версій Android, і в моєму контексті пропозиція Девіда Міллера використовувати SherlockActionBar була найбільш актуальною.
користувач77115

1
Маленький шматочок для інших: якщо ви зробите перший елемент у вашому представленні XML таким же фоном, що і ваш ActionBar (у нашому випадку білий), ActionBar стає сірим.
Джошуа Пінтер

Якщо ви задумаєтесь, TitleBar та ActionBar не пропонують нічого особливого. Вони більше схожі на неприємність, особливо коли ти їх не знаєш. A.better альтернативою було б приховати їх та створити власний рядок заголовка. Ви можете додавати власні віджети за допомогою "Views" та "малюнки". Оскільки в рядку заголовка віджетів немає. А на панелі дій може бути лише один випадаючий список для всіх меню. Навіть у багатьох додатках вилучено панель дій на користь своїх.

Відповіді:


523

Згідно з документацією - "Ви можете керувати поведінкою та видимістю панелі дій за допомогою API-файлів ActionBar, які були додані в Android 3.0 (рівень 11 API)."

Отже, ActionBar не працюватиме для вашого цільового середовища, що знаходиться на рівні API 10 (Android 2.3.3).

На всякий випадок, якщо ви орієнтуєтесь на мінімальний рівень 11 API, ви можете змінити колір тла ActionBar, визначивши власний стиль, як:

<resources>
    <style name="MyTheme" parent="@android:style/Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/MyActionBar</item>
    </style>

    <style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">ANY_HEX_COLOR_CODE</item>
    </style>
</resources>

І встановіть "MyTheme" як тему для програми / діяльності.


12
@AlexanderFragotsis використання <item name="android:textColor">@color/my_color</item>.
lethargicpanda

28
Цей же підхід слід використовувати, якщо ви використовуєте бібліотеку ActionBarCompat. Єдина відмінність полягає в тому, що вам слід змінити пункт actionBarStyle (без android: префікса), щоб визначити, як виглядатиме панель дій на пристроях Android до 3.0,
Алекс Семенюк

3
Чи є можливість замість того, щоб вводити код HEX кольору, посилатись на а @android:colorабо навіть на визначений колір colors.xml? Я пробував це без успіху.
jmrodrigg

1
Я не в змозі змінити колір тексту в рядку тексту за допомогою "<item name =" android: textColor "> @ color / my_color </item>"
Shirish Herwade

2
Для мене це не спрацювало з android: background tag, але коли я покинув тег android і помістив лише <item name = "background"> ​​колір змінився для всіх платформ.
stevyhacker

209

Спробуйте це

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable("COLOR"));

1
11-06 10: 53: 16,985: E / AndroidRuntime (16956): java.lang.NoSuchMethodError: com.acme.myActivity.getActionBar
користувач77115

1
@ coder_For_Life22 чи знаєте ви, як я можу отримати контекстну панель дій?
Geeks On Hugs

5
afaik, у самій бібліотеці підтримки немає ActionBar, тому вам доведеться включити SherlockActionBar.
Девід Мілер

22
можливо, це дивно, але в моєму випадку bar.setBackgroundDrawable(new ColorDrawable(Color.BLUE));змініть колір панелі дій на сірий. Це трапляється також, якщо нанести інший колір, наприклад Color.RED, Color.GREENі так далі ... Чи має хтось ту ж проблему чи знає причину цього питання? Я використовую пристрій Nexus S
AlexAndro

4
stackoverflow.com/a/17198657/1022454 Здається, цей пост вирішує проблему, коли колір смужки дій стає сірим.
Джонатан Фрай

124

спробуйте це:

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff")));

1
Як це вписується в решту коду? просто цікаво, куди насправді додати це
JGallardo

7
У мене є точне запитання як @JGallardo. Куди ви додаєте це? Я спробував це, onCreateале він дав правки NullPointerException : Це код, який я додав у restoreActionBarActionBar actionBar = getSupportActionBar (); actionBar.setBackgroundDrawable (новий ColorDravable (Color.parseColor ("# E5E4E2")));
rockydgeekgod

Додайте до нього метод onCreate своєї активності.
Ojonugwa Jude Ochalifu

3
використовувати getSupportActionBar () instad з getActionBar ()
Chanaka Fernando

69

Використовуйте це - http://jgilfelt.github.io/android-actionbarstylegenerator/

Це дивовижний інструмент, який дозволяє вам налаштувати панель дій за допомогою попереднього попереднього перегляду.

Я спробував попередні відповіді, але завжди мав проблеми зі зміною інших кольорів, як-от вкладки та букви, і витрачав години на виправлення речей. Цей інструмент допоміг мені зробити дизайн лише за пару хвилин.

Ось скріншот інструменту

Всього найкращого! :)


як мені встановити додаток використовувати файли після їх додавання до мого додатка?
Майк

У контексті наведеного вище екрана (названий приклад) після вставки створеної папки res потрібно мати новий стиль @ style / Theme.Example. В AndroidManifest.xml встановіть <application android: theme = "@ style / Theme.example">. Має працювати :)
Mohammad Shabaz Moosa

1
застарілий. на жаль
Лянцзюн

55

У мене була така ж проблема, коли моя панель дій стане сірою, коли я ввів цей код. Можливо, ваш оригінальний аркуш стилів виглядав так:

<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    <!-- API 14 theme customizations can go here. -->
</style>

"DarkActionBar" - це те, що зберігало ваш Дія бар сірим. Я змінив це на це, і воно спрацювало:

<style name="AppBaseTheme" parent="android:Theme.Holo.Light">
    <!-- API 14 theme customizations can go here. -->
    <item name="android:actionBarStyle">@style/MyActionBar</item>
</style>

<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
    <item name="android:background">#2aa4cd</item>
    <item name="android:titleTextStyle">@style/Theme.MyAppTheme.ActionBar.TitleTextStyle</item>
</style>        

<style name="Theme.MyAppTheme.ActionBar.TitleTextStyle" parent="android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:textColor">#FFFFFF</item>
</style>    

Я також підказав, як редагувати колір тексту. Крім того, не потрібно нічого змінювати навколо ресурсів.

-Воррен


38

Поведінка панелі дій також може бути змінено в API <11

Див Android Офіційний документ для довідки

Я будую додаток, minSdkVersion = "9"і targetSdkVersion = "21"я змінив колір панелі дій, і він чудово працює з API рівня 9

Ось xml

res/values/themes.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
           parent="@style/Theme.AppCompat.Light.DarkActionBar">
        <item name="android:actionBarStyle">@style/MyActionBar</item>

        <!-- Support library compatibility -->
        <item name="actionBarStyle">@style/MyActionBar</item>
    </style>

    <!-- ActionBar styles -->
    <style name="MyActionBar"
           parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
        <item name="android:background">@color/actionbar_background</item>

        <!-- Support library compatibility -->
        <item name="background">@color/actionbar_background</item>
    </style>
</resources>

і встановіть потрібний колір панелі дій

res/values/colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="actionbar_background">#fff</color> //write the color you want here
</resources>

Колір панелі дій також можна визначити у .classфайлі, фрагмент є

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff")));

але це не буде працювати з API <11 , тому стилізація панелі дій xmlє єдиним способом для API <11



Фрагмент не працює в моєму додатку, коли використовується в фрагменті. Я змінив його на панелі ActionBar = getActivity (). GetActionBar (); . Як тільки фрагмент збирається відкрити, він розбивається.
Жозе Мануель Абарка Родрігес

1
Знайшла проблему, вона працює з: ActionBar actionBar = getSupportActionBar ();
Хосе Мануель Абарка Родрігес

20

Прямо додайте цей рядок за допомогою свого коду кольорів

getSupportActionBar().setBackgroundDrawable(
    new ColorDrawable(Color.parseColor("#5e9c00")));

не потрібно щоразу створювати об’єкт ActionBar ...


1
Краще використовувати ресурси, щоб отримати колір, а не мати його як текст. getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.black)));
Дінеш

15

У Nexus 4 людей, здається, цей колір стає сірим.

ActionBar bar = getActionBar(); // or MainActivity.getInstance().getActionBar()
bar.setBackgroundDrawable(new ColorDrawable(0xff00DDED));
bar.setDisplayShowTitleEnabled(false);  // required to force redraw, without, gray color
bar.setDisplayShowTitleEnabled(true);

(вся заслуга в цій публікації, але вона похована в коментарях, тому я хотів викласти її тут) https://stackoverflow.com/a/17198657/1022454


2
Провівши незліченну кількість годин, намагаючись зрозуміти, що WTH було неправильним, ця відповідь допомогла мені.
Абдулла Умер

13

спробуйте один код рядка:

getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.MainColor)));

1
Мій додаток не відповідає цій відповіді. Щоб він працював у фрагменті, я змінив його так: getActivity (). GetActionBar (). SetBackgroundDravable (новий ColorDravable (getActivity (). GetResources (). GetColor (R.color.col_nar))); , також спробував getActivity (). getActionBar (). setBackgroundDravable (новий ColorDravable (getResources (). getColor (R.color.col_nar))); . Він руйнується, як тільки фрагмент відкриється.
Жозе Мануель Абарка Родрігес

1
Знайшла проблему, вона працює з: ActionBar actionBar = getSupportActionBar ();
Жозе Мануель Абарка Родрігес

1
відповідь - за активність. Якщо ви хочете використовувати його з фрагментом, то вам доведеться використовувати getActivity (). GetActionBar () для фрагментів
SANAT

7

Використовуйте код нижче, щоб надати текстові панелі дій та фон панелі дій різного кольору, просто використовуйте тему нижче в маніфесті проти діяльності, в якій потрібно вивести :)

<style name="MyTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionBarStyle">@style/MyActionBar</item>
</style>

<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
    <item name="android:titleTextStyle">@style/TitleBarTextColor</item>
    <item name="android:background">YOUR_COLOR_CODE</item>
</style>

<style name="TitleBarTextColor" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">YOUR_COLOR_CODE</item>
</style>

5

Так ви можете змінити колір панелі дій.

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;


public class ActivityUtils {

public static void setActionBarColor(AppCompatActivity appCompatActivity, int colorId){
    ActionBar actionBar = appCompatActivity.getSupportActionBar();
    ColorDrawable colorDrawable = new ColorDrawable(getColor(appCompatActivity, colorId));
    actionBar.setBackgroundDrawable(colorDrawable);
}

public static final int getColor(Context context, int id) {
    final int version = Build.VERSION.SDK_INT;
    if (version >= 23) {
        return ContextCompat.getColor(context, id);
    } else {
        return context.getResources().getColor(id);
    }
}
}

Зі свого MainActivity.java змініть такий колір рядка дій

    ActivityUtils.setActionBarColor(this, R.color.green_00c1c1);

5

Коли ви розширюєте активність, використовуйте наступний код

ActionBar actionbar = getActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));

Коли ви розширюєте AppCompatActivity, використовуйте наступний код

ActionBar actionbar = getSupportActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));

2

Цей код може бути корисним

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
</style>
<style name="Theme.MyTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- customize the color palette -->
    <item name="colorPrimary">@color/material_blue_500</item>
    <item name="colorPrimaryDark">@color/material_blue_700</item>
    <item name="colorAccent">@color/material_blue_500</item>
    <item name="colorControlNormal">@color/black</item>

</style>
<style name="CardViewStyle" parent="CardView.Light">
    <item name="android:state_pressed">@color/material_blue_700</item>
    <item name="android:state_focused">@color/material_blue_700</item>
    <!--<item name="android:background">?android:attr/selectableItemBackground</item>-->
</style>


1

Використовуйте цей код ..для зміни кольору фону панелі дій. відкрийте "res / values ​​/ themes.xml" (якщо немає, створіть його) та додайте

<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- the theme applied to the application or activity -->
<style name="CustomActionBarTheme"
       parent="@android:style/Theme.Holo.Light.DarkActionBar">
    <item name="android:actionBarStyle">@style/MyActionBar</item>
</style>
 <!-- ActionBar styles -->
<style name="MyActionBar"
       parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@drawable/actionbar_background</item>
</style>

Примітка: цей код працює лише для версій Android 3.0 та новіших версій


1

Це працювало для мене, для AppCompatActivity,

    <item name="actionBarStyle">@style/BlackActionBar</item>
</style>

<style name="BlackActionBar" parent="@style/Widget.AppCompat.ActionBar.Solid">
    <item name="background">@android:color/black</item>
    <item name="titleTextStyle">@style/BlackActionBarTitleTextStyle</item>
</style>

<style name="BlackActionBarTitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">@android:color/white</item>
    <item name="android:fontFamily">@font/cinzel_decorative</item>
</style>

1

Це дуже просто для тих, хто використовує API 21 або вище. Використовуйте цей код нижче

для Dark ActionBar

<resources>
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="android:background">@color/colorDarkGrey</item>
</style>

for_LightActionBar

<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.ActionBar">
    <item name="android:background">@color/colorDarkGrey</item>
</style>

0

Використовуйте це, воно б спрацювало.

ActionBar actionbar = getActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));

0

Іноді ця опція кидає NullPointerException

ActionBar actionbar = getActionBar(); actionbar.setBackgroundDrawable(new ColorDrawable("color"));

Але цей варіант працює для мене. Тож ви можете спробувати це.

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#FFFFFF")));

Щасливе кодування


0

Якщо ви використовуєте androidx AppCompact. Використовуйте код нижче.

androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable("Color"));

-2
getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.TabColor)));

Файл color.xml:

<resources> <color name="TabColor">#11FF00</color> </resources>`
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.