Cách đặt màu / kiểu ActionBar tùy chỉnh?


87

Tôi đang sử dụng Android Navigation bartrong dự án của mình, tôi muốn thay đổi màu trên cùng trong thanh tác vụ thành màu đỏ, Làm cách nào để làm điều đó? Tôi có một cái gì đó như thế này,

màu đen trên cùng

và tôi muốn một cái gì đó như thế này,

màu đỏ trên cùng

làm thế nào tôi có thể đạt được điều đó?

Câu trả lời:


174

Bạn có thể xác định màu của ActionBar (và các thứ khác) bằng cách tạo một Kiểu tùy chỉnh :

Chỉ cần chỉnh sửa tệp res / values ​​/ styles.xml của dự án Android của bạn.

Ví dụ như thế này:

<resources>
    <style name="MyCustomTheme" parent="@android:style/Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/MyActionBarTheme</item>
    </style>

    <style name="MyActionBarTheme" parent="@android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">ANY_HEX_COLOR_CODE</item>
    </style>
</resources>

Sau đó, đặt "MyCustomTheme" làm Chủ đề Hoạt động của bạn có chứa Thanh hành động.

Bạn cũng có thể đặt màu cho ActionBar như sau:

ActionBar actionBar = getActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable(Color.RED)); // set your desired color

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


2
Ý bạn là gì khi nói "Sau đó đặt" MyCustomTheme "làm Chủ đề Hoạt động của bạn có chứa Thanh hành động." Làm thế nào để làm điều đó?
Kala J

2
Trong XML hoạt động của mình, bạn phải thêm android: theme = "@ style / MyCustomTheme" làm đơn vị đo bên trong thẻ <android.support.v4.view.ViewPager ... />
PedroD

2
những gì về valuesv14 và valuesv21 file styles.xml còn lại trong android
Harsha

Làm thế nào để thay đổi tiêu đề textStyle?
Adam Hurwitz

@KalaJ sử dụng setTheme(R.style.MyCustomTheme) trong phương thức onCreate của hoạt động của bạn.
NullByte08,

57

Nhìn chung, Hệ điều hành Android tận dụng “chủ đề” để cho phép các nhà phát triển ứng dụng áp dụng toàn cầu một tập hợp các thông số tạo kiểu phần tử giao diện người dùng cho toàn bộ các ứng dụng Android hoặc cách khác, cho một lớp con Hoạt động.

Vì vậy, có ba "chủ đề hệ thống" của hệ điều hành Android chính mà bạn có thể chỉ định trong tệp XML Manifest trên Android của mình khi bạn đang phát triển ứng dụng cho Phiên bản 3.0 và các phiên bản mới hơn

Tôi đang tham khảo thư viện hỗ trợ (APPCOMPAT) ở đây: - Ba chủ đề là 1. Chủ đề AppCompat Light (Theme.AppCompat.Light)

nhập mô tả hình ảnh ở đây

  1. AppCompat Dark Theme (Theme.AppCompat),

nhập mô tả hình ảnh ở đây

  1. Và sự kết hợp giữa hai thứ này, AppCompat Light Theme với Darker ActionBar. (Theme.AppCompat.Light.DarkActionBar)

AndroidManifest.xml và xem thẻ, chủ đề android được đề cập là: - android: theme = "@ style / AppTheme"

Mở Styles.xml và chúng tôi có chủ đề ứng dụng cơ bản được khai báo ở đó: -

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  </style>

Chúng ta cần ghi đè các phần tử chủ đề mẹ này để tạo kiểu cho thanh tác vụ.

ActionBar với nền màu khác nhau: -

Để thực hiện việc này, chúng ta cần tạo một kiểu MyActionBar mới (bạn có thể đặt bất kỳ tên nào) với tham chiếu gốc là @ style / Widget.AppCompat.Light.ActionBar.Solid.Inverse chứa các đặc điểm kiểu cho phần tử Android ActionBar UI. Vì vậy, định nghĩa sẽ là

<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="background">@color/red</item>
</style>

Và định nghĩa này chúng ta cần tham chiếu trong AppTheme của mình, trỏ đến kiểu ActionBar bị ghi đè là--

@ style / MyActionBar ActionBar với màu nền hồng

Thay đổi màu văn bản của thanh tiêu đề (ví dụ: từ đen sang trắng): -

Bây giờ để thay đổi màu văn bản tiêu đề, chúng ta cần ghi đè tham chiếu gốc cha = "@ style / TextAppearance.AppCompat.Widget.ActionBar.Title">

Vì vậy, định nghĩa phong cách sẽ là

<style name="MyActionBarTitle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">@color/white</item>
</style>

Chúng tôi sẽ tham chiếu định nghĩa kiểu này bên trong định nghĩa kiểu MyActionBar , vì sửa đổi TitleTextStyle là phần tử con của phần tử giao diện người dùng hệ điều hành mẹ ActionBar. Vì vậy, định nghĩa cuối cùng của phần tử kiểu MyActionBar sẽ là

<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="background">@color/red</item>
    <item name="titleTextStyle">@style/MyActionBarTitle</item>
</style>

VẬY, đây là Styles.xml cuối cùng

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <!-- This is the styling for action bar -->
        <item name="actionBarStyle">@style/MyActionBar</item>
    </style>

    <style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
        <item name="background">@color/red</item>
        <item name="titleTextStyle">@style/MyActionBarTitle</item>
    </style>

    <style name="MyActionBarTitle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
        <item name="android:textColor">@color/white</item>
    </style>
</resources>

Thanh hành động Với màu tiêu đề trắng Để biết thêm tùy chọn ActionBar Kiểu menu, hãy tham khảo liên kết này


2
Này anh bạn, nó đã hoạt động. còn nghi ngờ gì nữa nếu tôi muốn thay đổi màu của biểu tượng tràn menu, nó sẽ thay đổi màu theo chủ đề của chúng ta phải không ?. biểu tượng màu trắng cho chủ đề tối và biểu tượng tối cho chủ đề sáng, làm cách nào để thay đổi nó thành màu trắng? xem xét hình ảnh cuối cùng trong câu trả lời của bạn.
Ameen Maheen

33

Chỉ dành cho Android 3.0 trở lên

Khi chỉ hỗ trợ Android 3.0 trở lên, bạn có thể xác định nền của thanh tác vụ như sau:

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.Holo.Light.DarkActionBar">
       <item name="android:actionBarStyle">@style/MyActionBar</item>
    </style>

<!-- ActionBar styles -->
  <style name="MyActionBar" parent="@style/Widget.Holo.Light.ActionBar.Solid.Inverse">
       <item name="android:background">#ff0000</item>
  </style>
</resources>

Đối với Android 2.1 trở lên

Khi sử dụng Thư viện hỗ trợ, tệp XML kiểu của bạn có thể trông giống như sau:

<?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">@drawable/actionbar_background</item>

    <!-- Support library compatibility -->
    <item name="background">@drawable/actionbar_background</item>
  </style>
 </resources>

Sau đó, áp dụng chủ đề của bạn cho toàn bộ ứng dụng hoặc các hoạt động riêng lẻ:

để biết thêm chi tiết Documentaion


Điều này thật kỳ lạ: bạn cung cấp cho Android 3.0 trở lên một kiểu cũ hơn (holo) hơn 2.1 và cao hơn (Material Design / Appcompat) ...
Roel

@DalvikVM Yeah..Appcompat dành cho các phiên bản cũ hơn. không cần sử dụng nó cho các phiên bản cao hơn. Tại thời điểm câu trả lời này, thiết kế material design chưa được giới thiệu.
Ketan Ahir

Tôi gặp lỗi: No resource found that matches the given name '@style/Widget.Holo.Light.ActionBar.Solid.Inverse'.Thay đổi nó để android:style/Widget.Holo.Light.ActionBar.Solid.Inversegiải quyết sự cố. Cảm ơn.
Annie Lagang

@ style / Theme.AppCompat.Light.DarkActionBar không thể được giải quyết trong trường hợp của tôi (Android Studio) - nó không phải là @android: style / Theme.AppCompat.Light.DarkActionBar - tức là với "android" được thêm vào trước phong cách?
AgentKnopf

32

Bạn có thể thay đổi màu thanh tác vụ theo cách này:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/green_action_bar</item>
</style>

Đó là tất cả những gì bạn cần để thay đổi màu thanh hành động.

Ngoài ra, nếu bạn muốn thay đổi màu thanh trạng thái, chỉ cần thêm dòng:

 <item name="android:colorPrimaryDark">@color/green_dark_action_bar</item>

Đây là ảnh chụp màn hình được chụp từ trang web Android của nhà phát triển để làm rõ hơn và đây là liên kết để đọc thêm về cách tùy chỉnh bảng màu

nhập mô tả hình ảnh ở đây


7

Một khả năng thực hiện khác.

actionBar.setBackgroundDrawable (ColorDrawable mới (Color.parseColor ("# 0000ff")));


5

Tôi có thể thay đổi màu văn bản ActionBar bằng cách sử dụng titleTextColor

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="titleTextColor">#333333</item>
</style>

3

Tự phối màu:

 <style name="AppTheme" parent="Theme.AppCompat.Light">

                <item name="colorPrimary">@color/ColorPrimary</item>
                <item name="colorPrimaryDark">@color/ColorPrimaryDark</item>
                <!-- Customize your theme here. -->
     </style>

Phong cách tùy chỉnh:

 <style name="Theme.AndroidDevelopers" parent="android:style/Theme.Holo.Light">
        <item name="android:selectableItemBackground">@drawable/ad_selectable_background</item>
        <item name="android:popupMenuStyle">@style/MyPopupMenu</item>
        <item name="android:dropDownListViewStyle">@style/MyDropDownListView</item>
        <item name="android:actionBarTabStyle">@style/MyActionBarTabStyle</item>
        <item name="android:actionDropDownStyle">@style/MyDropDownNav</item>
        <item name="android:listChoiceIndicatorMultiple">@drawable/ad_btn_check_holo_light</item>
        <item name="android:listChoiceIndicatorSingle">@drawable/ad_btn_radio_holo_light</item>
    </style>

Để biết thêm: Android ActionBar


2

Như tôi đã sử dụng AppCompatActivityở trên, các câu trả lời không phù hợp với tôi. Nhưng giải pháp dưới đây đã hoạt động:

Trong res / styles.xml

<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
</style>


Tái bút: Tôi đã sử dụng colorPrimarythay vìandroid:colorPrimary


1

trong style.xml thêm mã này

<resources>
    <style name="MyTheme" parent="@android:style/Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/MyAction</item>
    </style>

    <style name="MyActionBarTheme" parent="@android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">#333333</item>
    </style>
</resources>

0

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

Công cụ tốt để tùy chỉnh thanh tác vụ của bạn với bản xem trước trực tiếp trong vài phút.


1
Mặc dù liên kết này có thể trả lời câu hỏi, nhưng tốt hơn hết bạn nên đưa các phần thiết yếu của câu trả lời vào đây và cung cấp liên kết để tham khảo. Các câu trả lời chỉ có liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi.
Roman Marusyk
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.