ฉันจะเปลี่ยนสีพื้นหลังของ 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 สว่างขึ้นเพื่อให้ไอคอนสีเทาปรากฏชัดเจนยิ่งขึ้น

ฉันได้ลองปรับเปลี่ยนสไตล์ แต่ก็ไม่มีประโยชน์
ฉันอาจจะพลาดอะไรซักอย่าง

ฉันจะเปลี่ยนสีพื้นหลังของ ActionBar ของ ActionBarActivity โดยใช้ XML ได้อย่างไร


2
ปิดเกาลัดเก่านี้ คะแนนถึง Sannidhi ตามความต้องการที่เป็นที่นิยมอย่างไรก็ตามการตอบคำถามนี้ครอบคลุม Android ไม่กี่รุ่นและในบริบทของฉัน David Millers แนะนำให้ใช้ SherlockActionBar นั้นมีความเกี่ยวข้องมากที่สุด
user77115

1
ชิ้นอาหารอันโอชะเล็ก ๆ น้อย ๆ สำหรับคนอื่น: หากคุณสร้างองค์ประกอบแรกใน XML ของคุณให้ดูพื้นหลังเดียวกับ ActionBar ของคุณ (ในกรณีของเราสีขาว) ActionBar จะเปลี่ยนเป็นสีเทา
Joshua Pinter

เมื่อคุณคิดถึง TitleBar และ ActionBar อย่าเสนออะไรเป็นพิเศษ พวกเขาเป็นเหมือนความรำคาญโดยเฉพาะอย่างยิ่งเมื่อคุณไม่รู้จักพวกเขา ทางเลือกที่ดีกว่าคือการซ่อนและออกแบบแถบหัวเรื่องของคุณเอง คุณสามารถเพิ่มวิดเจ็ตของคุณเองด้วย Views และ drawable เนื่องจากแถบชื่อเรื่องไม่มีวิดเจ็ต และแถบการกระทำสามารถมีรายการแบบหล่นลงได้เพียงรายการเดียวสำหรับเมนูทุกรายการแม้แอปจำนวนมากจะมีแถบแอ็คชั่นทิ้งไว้เพื่อประโยชน์ของตนเอง

คำตอบ:


523

ตามเอกสาร - "คุณสามารถควบคุมพฤติกรรมและการมองเห็นของแถบการกระทำด้วย ActionBar APIs ซึ่งถูกเพิ่มใน 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
<item name="android:textColor">@color/my_color</item>ใช้ @AlexanderFragotsis
lethargicpanda

28
ควรใช้วิธีการเดียวกันนี้หากคุณใช้ห้องสมุด ActionBarCompat ความแตกต่างเพียงอย่างเดียวคือคุณควรเปลี่ยนรายการactionBarStyle (โดยไม่ต้องใช้Android:คำนำหน้า) เพื่อกำหนดว่า ActionBar จะดูอย่างไรกับอุปกรณ์ Android รุ่นก่อน 3.0
Alex Semeniuk

3
มีความเป็นไปได้ที่จะแทนการใส่รหัสสีของ HEX อ้างอิงใด ๆ@android:colorหรือแม้กระทั่งสีที่กำหนดเองที่กำหนดไว้ในcolors.xml? ฉันพยายามแล้วโดยไม่ประสบความสำเร็จ
jmrodrigg

1
ฉันไม่สามารถเปลี่ยนสีข้อความของแถบแอ็คชันข้อความโดยใช้ "<item name =" android: textColor "> @ color / my_color </item>"
Shirish Herwade

2
สิ่งนี้ไม่ได้ผลสำหรับฉันกับ android: แท็กพื้นหลัง แต่เมื่อฉันปล่อยแท็ก 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
ตอนนี้, ไลบรารีการสนับสนุนไม่มี ActionBar, เพราะคุณจะต้องรวม SherlockActionBar
David Miler

22
อาจจะแปลก แต่ในกรณีของฉันbar.setBackgroundDrawable(new ColorDrawable(Color.BLUE));เปลี่ยนสีแถบการกระทำเป็นสีเทา เหล่านี้เกิดขึ้นถ้าใส่สีอื่น ๆ เช่นColor.RED, Color.GREENและอื่น ๆ ... ไม่มีใครมีปัญหาเดียวกันหรือรู้สาเหตุของปัญหานี้หรือไม่? ฉันใช้อุปกรณ์ Nexus S
AlexAndro

4
stackoverflow.com/a/17198657/1022454โพสต์นี้ดูเหมือนจะแก้ไขปัญหาที่สีของแถบการกระทำเป็นสีเทา
Jonathon ทอด

124

ลองนี้:

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

1
สิ่งนี้เหมาะสมกับโค้ดที่เหลืออย่างไร แค่อยากรู้อยากเห็นว่าจะเพิ่มสิ่งนี้จริง ๆ
JGallardo

7
ฉันมีคำถามที่แน่นอนว่า @JGallardo คุณเพิ่มสิ่งนี้ที่ไหน ฉันลองใช้onCreateแต่ให้NullPointerException แก้ไข: นี่คือรหัสที่ฉันเพิ่มในrestoreActionBar ActionBar actionBar = getSupportActionBar (); actionBar.setBackgroundDrawable (ColorDrawable ใหม่ (Color.parseColor ("# E5E4E2")));
rockydgeekgod

เพิ่มวิธีการ onCreate ของกิจกรรม
Ojonugwa Jude Ochalifu

3
ใช้ getSupportActionBar () instad of getActionBar ()
Chanaka Fernando

69

ใช้สิ่งนี้ - http://jgilfelt.github.io/android-actionbarstylegenerator/

มันเป็นเครื่องมือที่ยอดเยี่ยมที่ให้คุณปรับแต่งแอคชั่นบาร์ของคุณด้วยการพรีวิวสด

ฉันลองคำตอบก่อนหน้านี้ แต่มักจะมีปัญหากับการเปลี่ยนสีอื่น ๆ เช่นแท็บและตัวอักษรและใช้เวลาหลายชั่วโมงในการปรับแต่งสิ่งต่าง ๆ เครื่องมือนี้ช่วยให้ฉันออกแบบให้เสร็จภายในเวลาไม่กี่นาที

นี่คือภาพหน้าจอของเครื่องมือ

ดีที่สุด! :)


ฉันจะตั้งค่าแอพของฉันให้ใช้ไฟล์ได้อย่างไรเมื่อมันถูกเพิ่มเข้าไปในแอพของฉัน
Mike

ในบริบทของภาพหน้าจอด้านบน (ตัวอย่างชื่อ) หลังจากวางโฟลเดอร์ res ที่สร้างขึ้นคุณควรมี style @ style / Theme.Example ใหม่ ใน AndroidManifest.xml ให้ตั้ง <application android: theme = "@ style / Theme.example"> น่าจะทำงานได้ :)
Mohammad Shabaz Moosa

1
เลิกใช้ น่าเสียดาย
เหลียงจุน

55

ฉันมีปัญหาเดียวกันกับที่แถบการกระทำของฉันจะเปลี่ยนเป็นสีเทาเมื่อฉันป้อนรหัสนั้น โอกาสที่สไตล์ชีทดั้งเดิมของคุณจะเป็นดังนี้:

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

"DarkActionBar" คือสิ่งที่ทำให้แถบสีเทาของคุณทำงาน ฉันเปลี่ยนเป็นสิ่งนี้และทำงานได้:

<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

พฤติกรรมของ Actionbar สามารถเปลี่ยนแปลงได้ใน APIs <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ดังนั้นการกำหนดสไตล์ให้กับ actionbar xmlเป็นวิธีเดียวสำหรับ API <11



ตัวอย่างไม่ทำงานในแอพของฉันเมื่อใช้ในส่วน ฉันเปลี่ยนเป็นแถบ ActionBar = getActivity (). getActionBar (); . ทันทีที่มีการเปิดแฟรกเมนต์
Jose Manuel Abarca Rodríguez

1
พบปัญหาใช้งานได้กับ: ActionBar actionBar = getSupportActionBar ();
Jose Manuel Abarca Rodríguez

20

เพิ่มบรรทัดนี้โดยตรงด้วยรหัสสีของคุณ

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

ไม่จำเป็นต้องสร้างวัตถุ ActionBar ทุกครั้ง ...


1
จะเป็นการดีกว่าถ้าใช้ทรัพยากรเพื่อให้ได้สีแทนที่จะใช้เป็นข้อความ getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(android.R.color.black)));
Dinesh

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 ผิดคำตอบนี้ช่วยฉันได้
Abdullah Umer

13

ลองรหัสหนึ่งบรรทัด:

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

1
แอพของฉันขัดข้องด้วยคำตอบนี้ ในการทำให้มันทำงานเป็นส่วนย่อยฉันได้เปลี่ยนมันดังนี้: getActivity (). getActionBar (). setBackgroundDrawable (ColorDrawable ใหม่ (getActivity (). getResources (). getColor (R.color.col_nar))); , ยังลองใช้ getActivity (). getActionBar (). setBackgroundDrawable (ใหม่ ColorDrawable (getResources (). getColor (R.color.col_nar))); . มันล้มเหลวทันทีที่เปิดแฟรกเมนต์
Jose Manuel Abarca Rodríguez

1
พบปัญหาใช้งานได้กับ: ActionBar actionBar = getSupportActionBar ();
Jose Manuel Abarca Rodríguez

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

บางครั้งตัวเลือกนี้จะพ่น NullPointerException

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

แต่ตัวเลือกนี้ใช้งานได้สำหรับฉัน ดังนั้นคุณสามารถลองสิ่งนี้

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

Happy Coding


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>`
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.