Как изменить цвет фона ActionBar ActionBarActivity с использованием XML?

Подробности:

Я расширяю 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?

21 ответ

Решение

Согласно документации - "Вы можете контролировать поведение и видимость панели действий с помощью 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" в качестве темы для приложения / деятельности.

Попробуй это

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

Попробуй это:

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

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

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

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

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

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

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

<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

Поведение панели действий также можно изменить в 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

Сразу добавьте эту строку с вашим цветовым кодом

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

не нужно каждый раз создавать объект ActionBar...

На 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);

(вся заслуга в этом посте, но он скрыт в комментариях, поэтому я хотел бы вспомнить его здесь) /questions/42606723/izmenit-tsvet-paneli-dejstvij-programmno-bolee-odnogo-raza/42606734#42606734

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

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

2021: Kotlin oneliner без устаревания:

      supportActionBar?.setBackgroundDrawable(ColorDrawable(ContextCompat.getColor(this,R.color.red)))

Просто поместите его в onCreate

Используйте код ниже, чтобы предоставить другой цвет тексту панели действий и фону панели действий, просто используйте тему ниже в манифесте против действия, в котором вы хотите выводить:)

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

Вот как вы можете изменить цвет панели действий.

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

Когда вы расширяете активность, используйте следующий код

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

При расширении AppCompatActivity используйте следующий код

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

Иногда этот параметр вызывает исключение NullPointerException

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

Но этот вариант у меня сработал. Так что вы можете попробовать это.

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

Счастливое кодирование

Это сработало для меня, для 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>

Если вы используете androidx AppCompact. Используйте приведенный ниже код.

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

Этот код может быть полезен

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

Это очень просто для тех, кто использует 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>

Используйте этот код для изменения цвета фона панели действий. откройте "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 и выше

Используйте это, это будет работать.

ActionBar actionbar = getActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));
getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.TabColor)));

файл color.xml:

<resources> <color name="TabColor">#11FF00</color> </resources>`
Другие вопросы по тегам