Как изменить цвет фона 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 ActionBarActivity с использованием XML?


2
Закрыв этот старый каштан. По многочисленным просьбам указывает на Саннидхи, однако ответы на этот вопрос охватывают довольно много версий Android, и в моем контексте предложение Дэвида Миллерса использовать SherlockActionBar было наиболее актуальным.
user77115

1
Небольшой трюк для других: если вы сделаете первый элемент в своем XML-представлении таким же фоном, как ваш ActionBar (в нашем случае белый), ActionBar станет серым.
Джошуа Пинтер

Когда вы думаете, TitleBar и ActionBar не предлагают ничего особенного. Они больше похожи на неприятности, особенно когда вы их не знаете. Альтернативой A.better было бы скрыть их и создать собственную строку заголовка. Вы можете добавить свои собственные виджеты с представлениями и рисованием. В строке заголовка нет виджетов. А у панели действий может быть только один выпадающий список для всех элементов меню. Даже многие приложения отказались от панели действий в пользу своих собственных.

Ответы:


523

Согласно документации - «Вы можете контролировать поведение и видимость панели действий с помощью API-интерфейсов ActionBar, которые были добавлены в Android 3.0 (уровень API 11)».

Таким образом, ActionBar не будет работать для вашей целевой среды, которая находится на уровне API 10 (Android 2.3.3).

На всякий случай, если вы нацелены на минимальный уровень API 11, вы можете изменить цвет фона 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>.
летаргическая панда

28
Тот же подход следует использовать, если вы используете библиотеку ActionBarCompat. Единственное отличие состоит в том, что вы должны изменить элемент actionBarStyle (без android: prefix), чтобы определить, как actionbar будет выглядеть на устройствах с Android до pre-3.0
Алекс Семенюк

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

1
Я не могу изменить цвет текста панели действий с помощью "<item name =" android: textColor "> @ color / my_color </ item>"
Шириш Хервейд,

2
Это не сработало для меня с тегом android: background, но когда я пропустил тег 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
user77115

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 Edit: это код, который я добавил в restoreActionBar ActionBar actionBar = getSupportActionBar (); actionBar.setBackgroundDrawable (new ColorDrawable (Color.parseColor ("# Ошибка4E2")));
Rockydgeekgod

Добавьте его метод onCreate вашей деятельности.
Оджонугва Джуд Очалифу

3
использовать getSupportActionBar () вместо getActionBar ()
Чанака Фернандо

69

Используйте это - http://jgilfelt.github.io/android-actionbarstylegenerator/

Это удивительный инструмент, который позволяет настроить панель действий с предварительным просмотром.

Я пробовал более ранние ответы, но всегда имел проблемы с изменением других цветов, таких как вкладки и буквы, и часами настраивал материал. Этот инструмент помог мне сделать мой дизайн всего за пару минут.

Вот скриншот инструмента

Всего наилучшего! :)


как настроить приложение на использование файлов после их добавления в мое приложение?
Майк

В приведенном выше снимке экрана (именованный пример) после вставки сгенерированной папки res у вас должен быть новый стиль @ style / Theme.Example. В AndroidManifest.xml установите <application android: theme = "@ style / Theme.example">. Должно работать :)
Мохаммед Шабаз Муса

1
осуждается. к сожалению
Liangjun

55

У меня была та же проблема, когда моя панель действий становилась серой, когда я вводил этот код. Скорее всего, ваша оригинальная таблица стилей выглядела так:

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

«DarkActionBar» был тем, что держало ваш Action Bar серым. Я изменил это на это, и это сработало:

<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>    

Я также добавил, как редактировать цвет текста. Также не нужно ничего менять вокруг ресурсов.

-Warren


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>

Цвет Actionbar также может быть определен в .classфайле, фрагмент

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

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



Фрагмент не работает в моем приложении, когда используется в фрагменте. Я изменил его для ActionBar bar = 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 (). SetBackgroundDrawable (new ColorDrawable (getActivity (). GetResources (). GetColor (R.color.col_nar))); , также попробовал getActivity (). getActionBar (). setBackgroundDrawable (new ColorDrawable (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.