web-dev-qa-db-ja.com

アクションバーのスタイルを設定する方法、選択したタブのタブの背景

ActionBarのスタイリングに苦労しています。私のアプリには、3つのタブがあるActionBarがあります。選択したタブに背景色を付け、選択していないタブに別の色を表示させようとしています。私はこのリファレンスに従っています: アクションバーのカスタマイズ 。ただし、すべてのTABで選択した色が表示されています。

僕の styles.xmlファイルは次のとおりです。

<style name="MyActionBarTabStyle" parent="Android:style/Widget.Holo.Light.ActionBar.TabBar">
    <item name="Android:background">@drawable/tab_background</item>
    <item name="Android:paddingLeft">32dp</item>
    <item name="Android:paddingRight">32dp</item>
</style> 

<style name="MyActionBarTabBarStyle" parent="Android:style/Widget.Holo.Light.ActionBar.TabBar">

    <item name="Android:background">@drawable/red</item>
</style> 


<style name="AppTheme.Light" parent="@Android:style/Theme.Holo.Light">
    <item name="Android:actionBarStyle">@style/ActionBar.Light</item>
    <item name="Android:actionBarTabStyle">@style/MyActionBarTabStyle</item>
    <item name="Android:actionBarTabBarStyle">@style/MyActionBarTabBarStyle</item>

</style>

tab_backgroundは単なる9パッチです。また、正しい親からアクションバータブを継承しているかどうかもわかりません(parent="Android:style/Widget.Holo.Light.ActionBar.TabBar)。参照を調べたところ、スタイル階層を理解するのが非常に難しいことがわかりました

タブが選択されているか、表示されないのはなぜですか?よろしくお願いします。

17
CocoNess

私は自分の問題を解決しました。最初はStateListDrawablesを使用していませんでした。 StateListDrawableを経由する代わりに、背景画像を直接使用しました。 StateListDrawableを使用すると、タグが選択されているかどうかに基づいて異なる背景を設定できます。

そこで、ファイルtab_background_select.xmlを追加しました

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_selected="true"
        Android:drawable="@drawable/tab_background" />

</selector>

styles.xmlからこれを参照しました:

 <item name="Android:background">@drawable/tab_background_select</item>
11
CocoNess