ActionBarにThemeを反映できないときに気をつけるところ

アプリのActionBarに対して、一律にThemeを変えたい事案がありました。 とりわけ、今回はActionBarのタイトルの色を変えたかった。

雰囲気だけ察するに、textColor 的なものをアレすればいけるっしょ!と意気込んでいたものの、想像以上にハマったのでメモ。

ブログは信じるべからず

当たり前といえば、当たり前ですが公式のドキュメントをちゃんと読みましょう。

ただ、どこを読めばいいのか、分からねぇんす。

Toolbar 関連を触っていたので、てっきりその変化と思いきや、ActionBar の項目に、いいコト書いてあった。

Support library compatibility を気にしなきゃいけない!

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

これは。。

最近開発を始めた私には、厳しすぎる事案。。

互換性、いつ必要になったんだろう。。

この互換性の記述があるかないかで、テーマの反映もされたり、されなかったりする。

気がつくまでにめっちゃ時間が掛かった。

テーマを変えようとしている人はお気をつけて。。

Related Posts