Làm cách nào để thay đổi màu nền của ActionBar của ActionBarActivity bằng XML?


277

Chi tiết:

Tôi đang mở rộng ActionBarActivity.
Eclipse và SDK được vá đầy đủ kể từ 2011-11-06.

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

Đã triển khai cho thiết bị Samsung với
Ứng dụng Android 2.3.3 cóandroid:theme="@android:style/Theme.Light"

Vấn đề: ứng dụng nhẹ, nhưng ActionBar có màu xanh với các biểu tượng màu xám, hầu như không nhìn thấy được so với màu nền xanh. Tôi cũng muốn ActionBar sáng, để các biểu tượng màu xám hiển thị rõ hơn.

Tôi đã thử sửa đổi các kiểu nhưng không có kết quả.
Có lẽ tôi đang thiếu một cái gì đó tầm thường.

Làm cách nào để thay đổi màu nền của ActionBar của ActionBarActivity bằng XML?


2
Đóng hạt dẻ cũ này. Điểm đến Sannidhi, theo nhu cầu phổ biến, tuy nhiên, các câu trả lời cho câu hỏi này bao gồm khá nhiều phiên bản Android và trong bối cảnh của tôi, David Millers đề nghị sử dụng SherlockActionBar là phù hợp nhất.
dùng77115

1
Tidbit nhỏ cho người khác: Nếu bạn tạo phần tử đầu tiên trong XML của bạn xem cùng nền với ActionBar của bạn (trong trường hợp của chúng tôi là màu trắng), ActionBar chuyển sang màu xám.
Joshua Pinter

Khi bạn nghĩ về, TitleBar và ActionBar không cung cấp bất cứ điều gì đặc biệt. Chúng giống như một mối phiền toái, đặc biệt là khi bạn không biết chúng. A.better thay thế sẽ là để ẩn chúng và thiết kế thanh tiêu đề của riêng bạn. Bạn có thể thêm các vật dụng của riêng bạn với Chế độ xem và hình vẽ. Như thanh tiêu đề cung cấp không có vật dụng. Và thanh hành động chỉ có thể có một danh sách thả xuống, cho tất cả các menuItems.Even rất nhiều Ứng dụng đã bỏ qua Action Bar để ủng hộ riêng họ.

Câu trả lời:


523

Theo tài liệu - "Bạn có thể kiểm soát hành vi và khả năng hiển thị của thanh hành động bằng API ActionBar, được thêm vào trong Android 3.0 (API cấp 11)."

Vì vậy, ActionBar sẽ không hoạt động cho môi trường mục tiêu của bạn ở API cấp 10 (Android 2.3.3).

Chỉ trong trường hợp, nếu bạn nhắm mục tiêu cho API cấp tối thiểu 11, bạn có thể thay đổi màu nền của ActionBar bằng cách xác định kiểu tùy chỉnh, như:

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

Và, đặt "MyTheme" làm chủ đề cho ứng dụng / hoạt động.


12
@AlexanderFragotsis sử dụng <item name="android:textColor">@color/my_color</item>.
lethargicpanda

28
Cách tiếp cận tương tự nên được sử dụng nếu bạn đang sử dụng thư viện ActionBarCompat. Sự khác biệt duy nhất là bạn nên thay đổi mục actionBarStyle (không có tiền tố android: tiền tố) để xác định thanh hành động sẽ trông như thế nào trên các thiết bị Android trước 3.0
Alex Semeniuk

3
Có khả năng nào, thay vì đặt mã HEX của màu, tham chiếu một @android:colorhoặc thậm chí một màu tùy chỉnh được xác định trong colors.xmlkhông? Tôi đã thử nó nhưng không thành công.
jmrodrigg

1
Tôi không thể thay đổi màu văn bản trên thanh hành động văn bản bằng cách sử dụng "<item name =" android: textColor "> @ color / my_color </ item>"
Shirish Herwade

2
Điều này không phù hợp với tôi với android: thẻ nền nhưng khi tôi bỏ thẻ android và chỉ đặt <item name = "background"> ​​màu đã thay đổi cho tất cả các nền tảng.
stevyhacker

209

Thử cái này

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

1
11-06 10: 53: 16.985: E / AndroidR.78 (16956): java.lang.NoSuchMethodError: com.acme.myActivity.getActionBar
user77115

1
@ coder_For_Life22 bạn có biết làm thế nào tôi có thể có được một thanh hành động theo ngữ cảnh không?
Geek On Hugs

5
afaik, thư viện hỗ trợ không có ActionBar, vì bạn sẽ phải bao gồm SherlockActionBar.
David Miler

22
có thể điều này là lạ nhưng trong trường hợp của tôi bar.setBackgroundDrawable(new ColorDrawable(Color.BLUE));thay đổi màu thanh hành động thành màu xám. Những điều này cũng xảy ra nếu đặt màu khác, như Color.RED, Color.GREENv.v ... Có ai có cùng một vấn đề, hoặc biết nguyên nhân của vấn đề này không? Tôi sử dụng thiết bị Nexus S
AlexAndro

4
stackoverflow.com/a/17198657/1022454 Bài đăng này dường như khắc phục sự cố trong đó màu thanh hành động chuyển sang màu xám.
Jonathon Fry

124

thử cái này:

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

1
Làm thế nào để điều này phù hợp với phần còn lại của mã? chỉ tò mò nơi thực sự thêm cái này
JGallardo

7
Tôi có câu hỏi chính xác là @JGallardo. Nơi nào bạn thêm điều này? Tôi đã thử nó onCreatenhưng nó đã cho NullPointerException Chỉnh sửa: Đây là mã tôi đã thêm vào restoreActionBar ActionBar actionBar = getSupportActionBar (); actionBar.setBackgroundDrawable (ColorDrawable mới (Color.parseColor ("# E5E4E2")));
rockydgeekgod

Thêm vào đó là phương thức onCreate của Activity.
Ojonugwa Jude Ochalifu

3
sử dụng getSupportActionBar () instad của getActionBar ()
Chanaka Fernando

69

Sử dụng cái này - http://jgilfelt.github.io/android-actionbarstylegenerator/

Đây là một công cụ tuyệt vời cho phép bạn tùy chỉnh thanh hành động của mình với bản xem trước trực tiếp.

Tôi đã thử các câu trả lời trước đó nhưng luôn gặp vấn đề với việc thay đổi màu sắc khác như các tab và chữ cái và dành hàng giờ để điều chỉnh công cụ. Công cụ này đã giúp tôi hoàn thành thiết kế của mình chỉ trong vài phút.

Đây là một ảnh chụp màn hình của công cụ

Tất cả là tốt nhất! :)


Làm cách nào để đặt ứng dụng của tôi sử dụng các tệp sau khi chúng được thêm vào ứng dụng của tôi?
Mike

Trong ngữ cảnh của ảnh chụp màn hình ở trên (ví dụ được đặt tên), sau khi dán thư mục res được tạo, bạn sẽ có một kiểu mới @ style / Theme.Example. Trong AndroidManifest.xml, đặt <application android: theme = "@ style / Theme.example">. Nên hoạt động :)
Mohammad Shabaz Moosa

1
không dùng nữa thật không may
Liangjun

55

Tôi gặp vấn đề tương tự, ở đó Action Bar của tôi sẽ chuyển sang màu xám khi tôi nhập mã đó. Rất có thể là phong cách ban đầu của bạn trông như thế này:

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

"DarkActionBar" là thứ giữ cho Action Bar của bạn màu xám. Tôi đã thay đổi nó thành cái này và nó hoạt động:

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

Tôi cũng đã ném vào làm thế nào để chỉnh sửa màu văn bản. Ngoài ra, không cần phải thay đổi bất cứ điều gì xung quanh các tài nguyên.

-Warren


38

Hành vi của Actionbar cũng có thể được thay đổi trong API <11

Xem Tài liệu chính thức của Android để tham khảo

Tôi đang xây dựng một ứng dụng minSdkVersion = "9"targetSdkVersion = "21"tôi đã thay đổi màu của thanh hành động và nó hoạt động tốt với API cấp 9

Đây là một 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>

và đặt màu của thanh hành động bạn muốn

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>

Màu sắc của thanh hành động cũng có thể được xác định trong .classtệp, đoạn mã là

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

nhưng điều này sẽ không hoạt động với API <11 , do đó, tạo kiểu cho thanh hành động xmllà cách duy nhất cho API <11



Đoạn mã không hoạt động trong ứng dụng của tôi khi được sử dụng trong một đoạn. Tôi đã thay đổi nó cho thanh ActionBar = getActivity (). GetActionBar (); . Ngay khi mảnh vỡ sắp được mở, nó gặp sự cố.
Jose Manuel Abarca Rodríguez

1
Đã tìm thấy sự cố, nó hoạt động với: ActionBar actionBar = getSupportActionBar ();
Jose Manuel Abarca Rodríguez

20

Thêm trực tiếp dòng này với mã màu của bạn

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

không cần tạo đối tượng ActionBar mỗi lần ...


1
Sẽ tốt hơn để sử dụng tài nguyên để có được màu sắc hơn là có nó như là một văn bản. getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.black)));
Dinesh

15

Trên Nexus 4, điều này dường như làm cho màu xám chuyển sang màu xám.

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

(tất cả tín dụng cho bài đăng này, nhưng nó bị chôn vùi trong các bình luận, vì vậy tôi muốn hiển thị nó ở đây) https://stackoverflow.com/a/17198657/1022454


2
Sau khi dành vô số thời gian để cố gắng tìm ra WTH là sai, câu trả lời này đã giúp tôi.
Abdullah Umer

13

thử một mã dòng:

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

1
Ứng dụng của tôi gặp sự cố với câu trả lời này. Để làm cho nó hoạt động trong một đoạn, tôi đã thay đổi nó như sau: getActivity (). GetActionBar (). SetBackgroundDrawable (new ColorDrawable (getActivity (). GetResource (). GetColor (R.color.col_nar)); , cũng đã thử getActivity (). getActionBar (). setBackgroundDrawable (new ColorDrawable (getResource (). getColor (R.color.col_nar))); . Nó sụp đổ ngay khi mảnh vỡ được mở ra.
Jose Manuel Abarca Rodríguez

1
Đã tìm thấy sự cố, nó hoạt động với: ActionBar actionBar = getSupportActionBar ();
Jose Manuel Abarca Rodríguez

1
Câu trả lời là cho hoạt động. Nếu bạn muốn sử dụng nó với đoạn thì bạn phải sử dụng getActivity (). GetActionBar () cho các đoạn
SANAT

7

Sử dụng mã bên dưới để cung cấp màu khác nhau cho văn bản trên thanh hành động và nền của thanh hành động, chỉ cần sử dụng chủ đề bên dưới để hiển thị đối với hoạt động mà bạn muốn xuất :)

<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

Đây là cách bạn có thể thay đổi màu sắc của Action Bar.

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

Từ MainActivity.java của bạn thay đổi màu thanh hành động như thế này

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

5

Khi bạn đang mở rộng Hoạt động, hãy sử dụng Mã sau

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

Khi bạn đang mở rộng AppCompatActivity, hãy sử dụng Mã sau

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

2

Mã này có thể hữu ích

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

Sử dụng mã này .. để thay đổi màu nền của thanh hành động. mở "res / value / Themes.xml" (nếu không có, tạo nó) và thêm

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

Lưu ý: mã này chỉ hoạt động cho Android 3.0 và các phiên bản cao hơn


1

Điều này làm việc cho tôi, cho 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

Rất đơn giản cho những ai đang sử dụng API 21 trở lên Sử dụng mã này bên dưới

cho 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

Sử dụng này, nó sẽ làm việc.

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

0

Đôi khi tùy chọn này ném NullPulumException

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

Nhưng tùy chọn này được làm việc cho tôi. Vì vậy, bạn có thể thử điều này.

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

Mã hóa hạnh phúc


0

Nếu bạn đang sử dụng Androidx AppCompact. Sử dụng mã dưới đây.

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

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

tập tin color.xml:

<resources> <color name="TabColor">#11FF00</color> </resources>`
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.