Bagaimana cara mengubah warna latar belakang ActionBar dari ActionBarActivity menggunakan XML?

277

Detail:

Saya memperluas ActionBarActivity.
Eclipse dan SDK sepenuhnya ditambal pada 2011-11-06.

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

Dikerahkan ke perangkat Samsung dengan
Aplikasi Android 2.3.3android:theme="@android:style/Theme.Light"

Masalah: aplikasi ringan, tetapi ActionBar berwarna biru dengan ikon abu-abu, hampir tidak terlihat terhadap warna latar belakang biru. Saya juga ingin ActionBar menjadi ringan, sehingga ikon abu-abu lebih terlihat.

Saya sudah mencoba memodifikasi gaya tetapi tidak berhasil.
Saya mungkin melewatkan sesuatu yang sepele.

Bagaimana cara mengubah warna latar belakang ActionBar dari ActionBarActivity menggunakan XML?

pengguna77115
sumber
2
Menutup chestnut tua ini. Poin ke Sannidhi, oleh permintaan populer, namun jawaban untuk pertanyaan ini mencakup beberapa versi Android, dan dalam konteks saya David Millers saran untuk menggunakan SherlockActionBar adalah yang paling relevan.
user77115
1
Berita gembira kecil untuk orang lain: Jika Anda membuat elemen pertama dalam XML Anda melihat latar belakang yang sama dengan ActionBar Anda (dalam kasus kami, putih), ActionBar berubah menjadi abu-abu.
Joshua Pinter
Ketika Anda memikirkan, TitleBar dan ActionBar tidak menawarkan sesuatu yang istimewa. Mereka lebih seperti gangguan, terutama ketika Anda tidak mengenal mereka. Alternatif A.better akan menyembunyikan mereka dan merancang judul bar Anda sendiri. Anda dapat menambahkan widget Anda sendiri dengan Tampilan dan dapat digambar. Karena Title bar tidak menyediakan widget. Dan bilah tindakan hanya dapat memiliki satu daftar drop-down, untuk semua item menu. Bahkan banyak Aplikasi telah membuang Bilah Tindakan yang mendukung mereka sendiri.

Jawaban:

523

Sesuai dokumentasi - "Anda dapat mengontrol perilaku dan visibilitas bilah tindakan dengan API ActionBar, yang ditambahkan di Android 3.0 (API level 11)."

Jadi, ActionBar tidak akan berfungsi untuk lingkungan target Anda yang berada di level API 10 (Android 2.3.3).

Untuk jaga-jaga, jika Anda menargetkan API level 11 minimum, Anda dapat mengubah warna latar belakang ActionBar dengan mendefinisikan gaya khusus, seperti:

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

Dan, atur "MyTheme" sebagai tema untuk aplikasi / aktivitas.

lupchiazoem
sumber
12
@AlexanderFragotsis digunakan <item name="android:textColor">@color/my_color</item>.
lethargicpanda
28
Pendekatan yang sama harus digunakan jika Anda menggunakan perpustakaan ActionBarCompat. Satu-satunya perbedaan adalah bahwa Anda harus mengubah item actionBarStyle (tanpa android: awalan) untuk menentukan bagaimana tampilan actionbar pada perangkat Android pra-3.0
Alex Semeniuk
3
Apakah ada kemungkinan untuk, alih-alih menempatkan kode HEX warna, referensi @android:coloratau bahkan warna kustom yang ditentukan colors.xml? Saya sudah mencobanya tanpa hasil.
jmrodrigg
1
Saya tidak dapat mengubah bilah tindakan teks warna teks menggunakan "<item name =" android: textColor "> @ color / my_color </item>"
Shirish Herwade
2
Ini tidak bekerja untuk saya dengan tag android: background tetapi ketika saya meninggalkan tag android dan meletakkan <item name = "background"> ​​warnanya berubah untuk semua platform.
stevyhacker
209

Coba ini

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable("COLOR"));
coder_For_Life22
sumber
1
11-06 10: 53: 16.985: E / AndroidRuntime (16956): java.lang.NoSuchMethodError: com.acme.myActivity.getActionBar
user77115
1
@ coder_For_Life22 Anda tahu bagaimana saya bisa mendapatkan bilah tindakan kontekstual?
Geeks On Hugs
5
afaik, perpustakaan dukungan itu sendiri tidak memiliki ActionBar, untuk itu Anda harus menyertakan SherlockActionBar.
David Miler
22
mungkin ini aneh tapi dalam kasus saya bar.setBackgroundDrawable(new ColorDrawable(Color.BLUE));ubah warna action bar menjadi abu-abu. Ini terjadi juga jika meletakkan warna lain, seperti Color.RED, Color.GREENdan seterusnya ... Apakah ada yang punya masalah yang sama, atau tahu penyebab masalah ini? Saya menggunakan perangkat Nexus S
AlexAndro
4
stackoverflow.com/a/17198657/1022454 Posting ini tampaknya memperbaiki masalah di mana warna bilah tindakan menjadi abu-abu.
Jonathon Fry
124

coba ini:

ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0000ff")));
pengguna2428604
sumber
1
Bagaimana ini cocok dengan sisa kode? hanya ingin tahu di mana sebenarnya menambahkan ini
JGallardo
7
Saya memiliki pertanyaan persis sebagai @Jallallardo. Di mana Anda menambahkan ini? Saya mencobanya onCreatetetapi memberikan NullPointerException Edit: Ini adalah kode yang saya tambahkan ke restoreActionBar ActionBar actionBar = getSupportActionBar (); actionBar.setBackgroundDrawable (ColorDrawable baru (Color.parseColor ("#den4E2"))));
rockydgeekgod
Tambahkan metode onCreate Aktivitas Anda.
Ojonugwa Jude Ochalifu
3
gunakan getSupportActionBar () instad dari getActionBar ()
Chanaka Fernando
69

Gunakan ini - http://jgilfelt.github.io/android-actionbarstylegenerator/

Ini alat luar biasa yang memungkinkan Anda menyesuaikan bilah tindakan dengan pratinjau langsung.

Saya mencoba jawaban sebelumnya, tetapi selalu memiliki masalah dengan mengubah warna lain seperti tab dan huruf dan menghabiskan waktu berjam-jam untuk memperbaiki hal-hal. Alat ini membantu saya menyelesaikan desain hanya dalam beberapa menit.

Berikut screenshot alat ini

Semua yang terbaik! :)

Mohammad Shabaz Moosa
sumber
bagaimana cara mengatur aplikasi saya untuk menggunakan file setelah mereka ditambahkan ke aplikasi saya?
Mike
Dalam konteks tangkapan layar di atas (bernama contoh), setelah menempel folder res yang dihasilkan, Anda harus memiliki style @ style / Theme.Example baru. Di AndroidManifest.xml, atur <application android: theme = "@ style / Theme.example">. Harus bekerja :)
Mohammad Shabaz Moosa
1
usang. sayangnya
Liangjun
55

Saya memiliki masalah yang sama, di mana Bilah Tindakan saya akan berubah menjadi abu-abu ketika saya memasukkan kode itu. Kemungkinan style sheet asli Anda terlihat seperti ini:

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

"DarkActionBar" adalah yang membuat Action Bar Anda berwarna abu-abu. Saya mengubahnya menjadi ini, dan berhasil:

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

Saya juga melemparkan cara mengedit warna teks. Juga, tidak perlu mengubah apa pun di sekitar sumber daya.

-Warren

Warren
sumber
38

Perilaku Actionbar juga dapat diubah dalam API <11

Lihat Dokumentasi Resmi Android untuk referensi

Saya membuat aplikasi minSdkVersion = "9"dan targetSdkVersion = "21"mengubah warna bilah tindakan dan berfungsi baik dengan API level 9

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

dan atur warna actionbar yang Anda inginkan

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>

Warna actionbar juga dapat didefinisikan dalam .classfile, potongannya

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

tetapi ini tidak akan bekerja dengan API <11 , jadi menata actionbar di xmlhanya cara untuk API <11

Apurva
sumber
Cuplikan tidak berfungsi di aplikasi saya saat digunakan dalam fragmen. Saya mengubahnya untuk ActionBar bar = getActivity (). GetActionBar (); . Begitu fragmen akan dibuka, crash.
Jose Manuel Abarca Rodríguez
1
Menemukan masalah, ini berfungsi dengan: ActionBar actionBar = getSupportActionBar ();
Jose Manuel Abarca Rodríguez
20

Langsung tambahkan baris ini dengan kode warna Anda

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

tidak perlu membuat objek ActionBar setiap kali ...

CrazyMind
sumber
1
Akan lebih baik menggunakan sumber daya untuk mendapatkan warna daripada memilikinya sebagai teks. getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.black)));
Dinesh
15

Pada Nexus 4 orang ini tampaknya membuat warna menjadi abu-abu.

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

(semua kredit untuk posting ini, tetapi terkubur dalam komentar, jadi saya ingin memunculkannya di sini) https://stackoverflow.com/a/17198657/1022454

John Ballinger
sumber
2
Setelah menghabiskan banyak waktu untuk mencari tahu WTH salah, jawaban ini membantu saya.
Abdullah Umer
13

coba satu kode baris:

getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.MainColor)));
SANAT
sumber
1
Aplikasi saya rusak dengan jawaban ini. Untuk membuatnya bekerja dalam sebuah fragmen, saya mengubahnya seperti ini: getActivity (). GetActionBar (). SetBackgroundDrawable (ColorDrawable baru (getActivity (). GetResources (). GetColor (R.color.col_nar))); , juga mencoba getActivity (). getActionBar (). setBackgroundDrawable (ColorDrawable baru (getResources (). getColor (R.color.col_nar))); . Itu crash segera setelah fragmen dibuka.
Jose Manuel Abarca Rodríguez
1
Menemukan masalah, ini berfungsi dengan: ActionBar actionBar = getSupportActionBar ();
Jose Manuel Abarca Rodríguez
1
jawabannya adalah untuk kegiatan tersebut. Jika Anda ingin menggunakannya dengan fragmen maka Anda harus menggunakan getActivity (). GetActionBar () untuk fragmen
SANAT
7

Gunakan kode di bawah ini untuk memberikan warna berbeda pada teks actionbar dan latar belakang actionbar, gunakan saja tema di bawah ini secara nyata terhadap aktivitas yang Anda inginkan :)

<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>
Android adalah segalanya bagi saya
sumber
5

Ini adalah bagaimana Anda dapat mengubah warna 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);
    }
}
}

Dari MainActivity.java Anda, ubah warna bilah tindakan seperti ini

    ActivityUtils.setActionBarColor(this, R.color.green_00c1c1);
Siddarth Kanted
sumber
5

Ketika Anda Memperluas Aktivitas, gunakan Kode berikut

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

Saat Anda Memperluas AppCompatActivity gunakan Kode berikut

ActionBar actionbar = getSupportActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));
arlo shie
sumber
2

Kode ini mungkin bermanfaat

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

Qutbuddin Bohra
sumber
1

Gunakan kode ini .. untuk mengubah warna latar belakang bilah tindakan. buka "res / values ​​/ themes.xml" (jika tidak ada, buat itu) dan tambahkan

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

Catatan: kode ini hanya berfungsi untuk Android 3.0 dan versi yang lebih tinggi

Amey Bawiskar
sumber
1

Ini bekerja untuk saya, untuk 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>
Tejasvi Hegde
sumber
1

Ini sangat sederhana bagi mereka yang menggunakan API 21 atau lebih tinggi. Gunakan kode ini di bawah ini

untuk 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>
nirazverma
sumber
0

Gunakan ini, itu akan berhasil.

ActionBar actionbar = getActionBar();
actionbar.setBackgroundDrawable(new ColorDrawable("color"));
Pankaj Lilan
sumber
0

Terkadang opsi ini melempar NullPointerException

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

Tetapi opsi ini berhasil bagi saya. Jadi kamu bisa coba ini.

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

Selamat Coding

Shahadat Hossain
sumber
0

Jika Anda menggunakan Androidx AppCompact. Gunakan kode di bawah ini.

androidx.appcompat.app.ActionBar actionBar = getSupportActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable("Color"));
DINITH RUKSHAN KUMARA
sumber
-2
getActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.TabColor)));

file color.xml:

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