2013-08-28 12 views
5

私は、APIレベル10以上(つまり、Android 2.3.3以降)でActionBarを使用するためにv7サポートライブラリを使用しています。今、私は外観を少しカスタマイズしたいので、アプリケーションテーマを追加しました。私values/styles.xmlの抜粋:v10およびv11 +の一般的なスタイルは?

これはcompatのものが使用されているのAndroid 2.3.3、上で正常に動作します。ただし、N4(またはエミュレータ)のAndroid 4.3では、スタイルは適用されません。私は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> 

(追加android:プレフィックスに気づく)は4.3で動作しますが、2.3に(スタイルは適用されません)しません。

<item>をそれぞれ2度指定することなくこれを回避する方法はありますか?

答えて

6

Googleドキュメントサイト上の完璧な例があります:

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

」を2回指定することを明確に推奨する公式ドキュメントへのリンクのため、この回答を受け入れました。少なくとも今私はそれをやっていないことを知っています**間違った**、ただ*醜い*。 – Felix

+2

@Felix「少なくとも今、私は間違っているのではなく、ちょうど醜いことを知っている。ハハ、よく言った。また、[スタイルとテーマをUIに適用する](http://developer.android.com/guide/topics/ui/themes.html#ApplyingStyles)もご覧ください。サブセクション「プラットフォームのバージョンに基づいてテーマを選択する」までスクロールします。将来あなたを助けるかもしれません。 – Vikram

2

私はあなたの問題を誤解していない場合は、あなたが一緒に私の経験で

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

この方法でそれを折りたたむことができ、この方法の日食は、私は場合により、糸くずの(時間のコンパイルエラーをあなたがstyles.xmlの内側代を変更するたびに与えます良いことを覚えておいてください)、しかしclean and rebuildはそれらのエラーを消し去ります。

4

私は接頭辞で1回、2回、各<item> を指定せずにこの問題を回避することができますどのような方法がありますし、一度なしで?

もう1つの方法は、バージョン固有のres/values-XXフォルダを作成することです。

デバイドは、バージョン10とバージョン10以上であるので、あなたが含むres/values-v10/styles.xmlを作成することができます。

デフォルトres/values/styles.xmlとバージョンが10+契約してみましょう:

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

、それはにISN多くの場合、<item></item>を2回指定するのとは異なります。

参考までに、ActionBarSherlockのプロジェクト構造を見ることができます。それはあなたにいくつかの指針を提供するはずです。

Applying Styles and Themes to the UIをご覧ください。サブセクションSelect a theme based on platform versionまでスクロールします。

関連する問題