2013-08-28 30 views
5

Tôi đang sử dụng thư viện hỗ trợ v7 để có ActionBar trên API cấp 10+ (đó là Android 2.3.3+). Bây giờ, tôi muốn tùy chỉnh giao diện một chút, vì vậy tôi đã thêm một chủ đề ứng dụng. Đoạn trích của tôi values/styles.xml:Các kiểu phổ biến cho v10 và v11 +?

Điều này hoạt động tốt trên Android 2.3.3, nơi sử dụng công cụ tương thích. Tuy nhiên, trên Android 4.3 trên N4 (hoặc trình mô phỏng), các kiểu không được áp dụng. Nếu tôi thay đổi các tập tin styles.xml tới:

<style name="AppTheme" parent="Theme.AppCompat.Light"> 
    <item name="android:actionBarStyle">@style/ActionBarStyle</item> 
</style> 

<style name="ActionBarStyle" parent="@style/Widget.AppCompat.ActionBar"> 
    <item name="android:background">@drawable/bg_actionbar</item> 
</style> 

(chú ý thêm android: prefix) nó hoạt động trên 4.3, nhưng không trên 2.3 (phong cách không được áp dụng).

Có cách nào tôi có thể giải quyết vấn đề này mà không chỉ định từng <item> hai lần, một lần với tiền tố và một lần không có?

Trả lời

6

Có một ví dụ hoàn hảo trên trang docs google: có

http://developer.android.com/guide/topics/ui/actionbar.html#StyleExample

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <!-- the theme applied to the application or activity --> 
    <style name="CustomActionBarTheme" 
      parent="@style/Theme.AppCompat.Light"> 
     <item name="android:actionBarStyle">@style/MyActionBar</item> 
     <item name="android:actionBarTabTextStyle">@style/TabTextStyle</item> 
     <item name="android:actionMenuTextColor">@color/actionbar_text</item> 

     <!-- Support library compatibility --> 
     <item name="actionBarStyle">@style/MyActionBar</item> 
     <item name="actionBarTabTextStyle">@style/TabTextStyle</item> 
     <item name="actionMenuTextColor">@color/actionbar_text</item> 
    </style> 

    <!-- general styles for the action bar --> 
    <style name="MyActionBar" 
      parent="@style/Widget.AppCompat.ActionBar"> 
     <item name="android:titleTextStyle">@style/TitleTextStyle</item> 
     <item name="android:background">@drawable/actionbar_background</item> 
     <item name="android:backgroundStacked">@drawable/actionbar_background</item> 
     <item name="android:backgroundSplit">@drawable/actionbar_background</item> 

     <!-- Support library compatibility --> 
     <item name="titleTextStyle">@style/TitleTextStyle</item> 
     <item name="background">@drawable/actionbar_background</item> 
     <item name="backgroundStacked">@drawable/actionbar_background</item> 
     <item name="backgroundSplit">@drawable/actionbar_background</item> 
    </style> 

    <!-- action bar title text --> 
    <style name="TitleTextStyle" 
      parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"> 
     <item name="android:textColor">@color/actionbar_text</item> 
    </style> 

    <!-- action bar tab text --> 
    <style name="TabTextStyle" 
      parent="@style/Widget.AppCompat.ActionBar.TabText"> 
     <item name="android:textColor">@color/actionbar_text</item> 
    </style> 
</resources> 
+0

Chấp nhận câu trả lời này vì liên kết đến tài liệu chính thức, trong đó đề xuất rõ ràng chỉ định từng '' hai lần. Ít nhất bây giờ tôi biết tôi không làm điều đó ** sai **, chỉ là * xấu xí *. – Felix

+2

@Felix 'Ít nhất bây giờ tôi biết tôi không làm sai, chỉ xấu xí'. Haha, cũng nói. Bạn cũng có thể xem: [Áp dụng kiểu và chủ đề cho giao diện người dùng] (http://developer.android.com/guide/topics/ui/themes.html#ApplyingStyles). Cuộn xuống phần phụ 'Chọn một chủ đề dựa trên phiên bản nền tảng'. Có thể giúp bạn trong tương lai. – Vikram

2

Nếu tôi đã không hiểu lầm vấn đề của bạn, bạn có thể sụp đổ nó lại với nhau theo cách này

<style name="AppTheme" parent="Theme.AppCompat.Light"> 
    <item name="android:actionBarStyle">@style/ActionBarStyle</item> 
    <item name="actionBarStyle">@style/ActionBarStyle</item> 
</style> 

<style name="ActionBarStyle" parent="@style/Widget.AppCompat.ActionBar"> 
    <item name="android:background">@drawable/bg_actionbar</item> 
    <item name="background">@drawable/bg_actionbar</item> 
</style> 

Theo kinh nghiệm của tôi, cách nhật thực này cho phép biên dịch lỗi thời gian mỗi khi bạn thay đổi somethings bên styles.xml (do lint nếu tôi nhớ tốt), nhưng clean and rebuild làm cho những lỗi đó biến mất.

4

là bất kỳ cách nào tôi có thể làm được việc này mà không chỉ định mỗi <item> hai lần, một lần với tiền tố và một lần không có?

Một cách khác là tạo phiên bản res/values-XX thư mục cụ thể.

Kể từ khi chia là phiên bản 10 và các phiên bản 10+, bạn có thể tạo res/values-v10/styles.xml chứa:

Hãy phiên bản 10+ đối phó với mặc định res/values/styles.xml:

<style name="AppTheme" parent="Theme.AppCompat.Light"> 
    <item name="android:actionBarStyle">@style/ActionBarStyle</item> 
</style> 

<style name="ActionBarStyle" parent="@style/Widget.AppCompat.ActionBar"> 
    <item name="android:background">@drawable/bg_actionbar</item> 
</style> 

Tuy nhiên, nó isn' khác nhiều so với việc chỉ định <item></item> hai lần.

Để tham khảo, bạn có thể xem cấu trúc dự án của ActionBarSherlock. Điều đó sẽ cung cấp cho bạn một số gợi ý.

Bạn cũng có thể xem: Applying Styles and Themes to the UI. Cuộn xuống phần phụ Select a theme based on platform version.

Các vấn đề liên quan