R.style.Theme

R.style.Themeは、API level 1から存在する、何も指定しないと設定されるデフォルトテーマ。

R.style  |  Android Developers
Style.xmlを使用してThemeをカスタマイズする | TechBooster

res/value/styles.xml
res/value/styles.xml

res/values/styles.xmlで、

android:ThemeをAppBaseThemeのparentにしてる。

反映されてない
反映されてない

反映されてない。

res/values-v11/styles.xml
res/values-v11/styles.xml

res/values-v11/styles.xmlをいじってみる。

こうしても、

変わらず
変わらず

変わらず。

res/values-v14/styles.xml
res/values-v14/styles.xml

res/values-v14/styles.xmlなら、

とすると、

反映されたっぽい
反映されたっぽい

反映されたっぽい。

バージョンが4以上なので、API level 14のフォルダのstyles.xmlを修正しないといけない。
バージョンが4以上なので、API level 14のフォルダのstyles.xmlを修正しないといけない。

バージョンが4以上なので、API level 14のフォルダのstyles.xmlを修正しないといけない。

Sample/android/R.style/Theme/src/R.style at master · bg1bgst333/Sample · GitHub

<declare-styleable>の中の<attr>のformat

<attr>のformatで変数の型を指定できる。
いろいろあるけど、文字列、整数値、に加えて色を定義していこう。
styles.xmlで、

customColorのformatは"color"なので、16進数で#ffffff00と書く。
黄色である。
activity_main.xmlで、

TextViewのbackgroundにcustomColorを指定。

こうなった
こうなった

こうなった。

Sample/android/declare-styleableTag/attrTag_format/src/declare-styleableTag at master · bg1bgst333/Sample · GitHub

<color>

以前もやったけど、<color>で色を定義できる。

スタイルとテーマ  |  Android デベロッパー  |  Android Developers

これも、colors.xmlを用意しなくても、styles.xmlで、

red, green, blueを定義して、値はそれぞれの16進数値をセット。
activity_main.xmlで、

backgroundに@colorでそれぞれの色をあてはめる。

こうなる
こうなる

こうなる。

Sample/android/colorTag/colorTag/src/colorTag at master · bg1bgst333/Sample · GitHub

<declare-styleable>の中の<attr>

<attr>を使って、複数の変数を定義していく。
styles.xmlで、

文字列customStrと整数値customIntを定義。
customStrの値は"ABCDE"
customIntの値は5とする。
問題は整数値を受け入れるViewの属性。
layout_widthとかはdpなのでintegerではなくdimensionだったりする。
activity_main.xmlで、

TextViewのtextにcustomStrはあてて、EditTextのmaxLengthにcustomIntをあててみる。
maxLengthはintegerなので。

TextViewにはcustomStrの&quot;ABCDE&quot;が反映されているし、EditTextはmaxLengthの5文字以上は入らない。
TextViewにはcustomStrの"ABCDE"が反映されているし、EditTextはmaxLengthの5文字以上は入らない。

TextViewにはcustomStrの"ABCDE"が反映されているし、EditTextはmaxLengthの5文字以上は入らない。

Sample/android/declare-styleableTag/attrTag/src/declare-styleableTag at master · bg1bgst333/Sample · GitHub

<declare-styleable>

<declare-styleable>の中で<attr>を使って変数を定義してみる。

ビュークラスを作成する  |  Android デベロッパー  |  Android Developers

別にattrs.xmlを追加してカスタムビューとして定義する必要は無い。
styles.xmlで、

先頭で、<declare-styleable>で、nameを"CustomTheme"とする。
中に、"customData"という<attr>を定義。型は文字列で。
このCustomThemeをAppThemeが継承して、customDataを"ABCDE"としておけば、activity_main.xmlで、

TextViewのandroid:textを"?attr/customData"としたときに、

&quot;ABCDE&quot;が反映される
"ABCDE"が反映される

"ABCDE"が反映される。

Sample/android/declare-styleableTag/declare-styleableTag/src/declare-styleableTag at master · bg1bgst333/Sample · GitHub

<style>の中の<item>のname

さて、Android Studioではどうだろうか。
プロジェクトを作ると、styles.xmlは、

既にcolorPrimaryという変数がある。
androidネームスペースは付いてない。
これが通るということはどこかで定義されている。

親のテーマの定義に飛んでみる
親のテーマの定義に飛んでみる

親のテーマの定義に飛んでみる。

定義に飛んだけど、いっぱいあるので、Ctrl+Fで検索フォーム出して&quot;colorPri~&quot;とか入れてみる。
定義に飛んだけど、いっぱいあるので、Ctrl+Fで検索フォーム出して"colorPri~"とか入れてみる。

定義に飛んだけど、いっぱいあるので、Ctrl + Fで検索フォーム出して"colorPri~"とか入れてみる。

あった
あった

あった。

declare-styleableタグのattrタグか
declare-styleableタグのattrタグか

declare-styleableタグのattrタグか。
(既に扱ってたけど。)

colorPrimaryはサポートライブラリで既に定義されているということ
colorPrimaryはサポートライブラリで既に定義されているということ

colorPrimaryはサポートライブラリで既に定義されているということ。
activity_main.xmlは、

androidネームスペースが付いてない変数colorPrimaryを展開。

colorPrimaryは緑なのでbackgroundが緑になった
colorPrimaryは緑なのでbackgroundが緑になった

colorPrimaryは緑なのでbackgroundが緑になった。

Sample/android/styleTag/itemTag_name/StyleTag at master · bg1bgst333/Sample · GitHub

<style>の中の<item>

<style>の中の<item>で、そのスタイルで反映すべきパラメータと値を指定するというのをこれまでやってきた。
styles.xmlで、

とすれば、アプリ全体のテーマ"AppTheme"において、android:layout_heightを30dpとするようになる。
これまで、ButtonなどのViewにstyleとして"CustomStyle~"を指定し、複数の特定の値がセットされるようにしてきた。
<item>は個別の変数のような形で使うこともできる。
activity_main.xmlで、

Buttonのandroid:layout_heightに"?attr/android:layout_height"を指定している。
不思議な感じだけど、"?attr/"を付けることで、さっきのstyles.xmlの"android:layout_height"を変数展開して値を反映させる。
つまり、android:layout_heightは30dpとなる。
android:layout_widthにも"?attr/android:layout_height"を指定していることが、"android:layout_height"を変数としての役割のみで使っている証拠。
だからlayout_heightであることに意味はない。
android:layout_widthも30dp。

縦横どちらも30dp
縦横どちらも30dp

縦横どちらも30dp。
ところで、<item>のnameは"android:layout_height"というようにこれまでは"android:"を付けるandroidネームスペースで書いてきた。
これを変数名とするならば、自分で変数名を付けられそうである。

AndroidのTheme/Styleを理解する - Qiita

ただこんな風にしてもダメ
ただこんな風にしてもダメ

ただこんな風にしてもダメ。

そもそもcolorPrimaryなんて定義されてない
そもそもcolorPrimaryなんて定義されてない

そもそもcolorPrimaryなんて定義されてない。
サポートライブラリを入れてないADT Bundle Eclipseみたいな旧環境でcolorPrimaryを定義してないので当然。
そう、定義してないと使えない。

Sample/android/styleTag/itemTag/src/styleTag at master · bg1bgst333/Sample · GitHub