android:actionBarStyle requires API level 11 (current min is 8)


「アクションバーのスタイル設定」の内容を試して遭遇したエラー(´・ω・`)

サポートライブラリを使用して、android:minSdkVersionが11より低い場合に発生。
eclipseの設定が違うのか、何処か他のページで回避法が記載されているのか
わからないが、少なからず「アクションバーのスタイル設定」では原因も回避法も
わからず(´・ω・`)

“android:actionBarStyle”でぐぐる。幾つかヒットしたページを眺めるうちに
回避法らしきものを発見ヽ( ・∀・)ノ
Android アプリ開発で使える XML の Tools 属性

tools:targetApi
Java における @TargetApi アノテーションと似たもの。 指定の要素がどの API level 以上で解釈可能なものなのかを、API level のコードネームか整数で指定することができる。
これも lint による検査時に使用される。
例えば android:actionBarStyle を API Level 11 より古い Android も対象にしているアプリで使うと 『android:actionBarStyle requires API Level 11 (current min is 7)』 ってエラーが lint で出されるけど、そういう場合にこの属性を使えば良い。

これだ(`・ω・´)と思い、あんまりよく読まず属性を付与してみるも、変化なし。
あるぇ(・3・)?と思いつつ、更にリンクされていたTools Attributesというページを開く。

<FrameLayout xmlns:android=”http://schemas.android.com/apk/res/android”
xmlns:tools=”http://schemas.android.com/tools”
android:layout_width=”match_parent”
android:layout_height=”match_parent” >
….

あ(ノ∀`)
名前空間のなんたらこうたらの「xmlns:tools=”http://schemas.android.com/tools”」を
指定し忘れていたw

多分、こういう形になればエラーが消えるはず。

<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
           parent="@style/Theme.AppCompat.Light.DarkActionBar"
           xmlns:tools="http://schemas.android.com/tools">
        <item name="android:actionBarStyle" tools:targetApi="11">@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>

名前空間の宣言は<style>じゃなくて<resources>の方が良いのかな?
このパターンだと関係してくるのは一つ目の<style>のところだからこれでもいいけど。

そいでactionbar_background.pngという名前の
actionbar_background
みたいなのをres/drawable-ldpiの辺りにぶち込んで実行すれば動くはず。

一応解決したので詳しく読まなかったが、バージョン別のフォルダにそれぞれの
バージョン向けのtheme.xmlを置いても回避出来るという話?
android:actionBarStyle requires API level 11
よくよく読んでみると、このページにも上記の回避法も書いてあるか。

Issue with changing ActionBar background – Android
画像を用意したくなかったら、ハードコーディングは良くないけど、
色指定する方法もあるよとのアドバイスもあったが試してないw


テキストカラーのカスタマイズの方も似たような修正を加えて、

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
           parent="@style/Theme.AppCompat"
           xmlns:tools="http://schemas.android.com/tools">
        <item name="android:actionBarStyle" tools:targetApi="11">@style/MyActionBar</item>
        <item name="android:actionBarTabTextStyle" tools:targetApi="11">@style/MyActionBarTabText</item>
        <item name="android:actionMenuTextColor" tools:targetApi="11">@color/actionbar_text</item>
 
        <!-- Support library compatibility -->
        <item name="actionBarStyle">@style/MyActionBar</item>
        <item name="actionBarTabTextStyle">@style/MyActionBarTabText</item>
        <item name="actionMenuTextColor">@color/actionbar_text</item>
    </style>
 
    <!-- ActionBar styles -->
    <style name="MyActionBar"
           parent="@style/Widget.AppCompat.ActionBar">
        <item name="android:titleTextStyle" tools:targetApi="11">@style/MyActionBarTitleText</item>
 
        <!-- Support library compatibility -->
        <item name="titleTextStyle">@style/MyActionBarTitleText</item>
    </style>
    <!-- ActionBar title text -->
    <style name="MyActionBarTitleText"
           parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
        <item name="android:textColor">@color/actionbar_text</item>
        <!-- The textColor property is backward compatible with the Support Library -->
    </style>
 
    <!-- ActionBar tabs text -->
    <style name="MyActionBarTabText"
           parent="@style/Widget.AppCompat.ActionBar.TabText">
        <item name="android:textColor">@color/actionbar_text</item>
        <!-- The textColor property is backward compatible with the Support Library -->
    </style>
  </resources>

res/values/の下にcolor.xmlを作成して

<resources>
    <color name="actionbar_text">#FF0000</color>
</resources>

のような感じにすると
a01
みたいな結果になるはず。(“a01″はアプリ名なのでその部分は異なる)

「タブインディケイターのカスタマイズ」はまだやってない(ノ∀`)


前々から気になっていたのだが、ごっぐるのトレーニング内容って誰向けというか
どのくらいの知識を持つ人間に対して書かれているんだろうか?
初心者だったら、このtools:targetApiや他の回避方法ってわからないような気が
するんだけど、俺氏以外の人は皆優秀な初心者達なんだろうか(´・ω・`)