Как изменить цвет фона ActionBar ActionBarActivity с использованием XML? - PullRequest
263 голосов
/ 06 ноября 2011

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

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

Ответы [ 17 ]

5 голосов
/ 25 мая 2017

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

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);
4 голосов
/ 14 марта 2018

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

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

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

ActionBar actionbar = getSupportActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));
2 голосов
/ 26 февраля 2015

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

<!-- 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 голос
/ 29 сентября 2015

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

0 голосов
/ 28 февраля 2019

Это сработало для меня, для 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>
0 голосов
/ 24 августа 2016

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

ActionBar actionbar = getActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));
0 голосов
/ 30 декабря 2015
getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.TabColor)));

файл color.xml:

<resources> <color name="TabColor">#11FF00</color> </resources>`
...