Edited at

Appcompat-v7のスタイル設定について忘備録

More than 3 years have passed since last update.

※自分がよく忘れてしまうので、残しています。ソースコード読みつつ動作確認はしていますが、あっさり目を通しただけなので正しくない(あるいは記事内容が古くなる)可能性があります。


要点

Appcompat-v7を使っている場合に、SpinnerやAutoTextInput等のスタイルを変更したい時に、どの設定を変えたらよいか確認したい場合は、appcompat-v7/2X.X.X/res/values/values.xml にあるPlatform.AppCompatを確認する。


values.xml


<style name="Platform.AppCompat" parent="android:Theme">
<item name="android:windowNoTitle">true</item>

<item name="buttonBarStyle">@android:style/ButtonBar</item>
<item name="buttonBarButtonStyle">@android:style/Widget.Button</item>
・・・
//以下略



具体例

例えば、Spinnerの設定を変えたい場合は、 appcompat-v7/2X.X.X/res/values/values.xml にあるPlatform.AppCompatを確認すると、


values.xml

<style name="Platform.AppCompat" parent="android:Theme">

...
<item name="android:spinnerStyle">@style/Widget.AppCompat.Spinner</item>
...

となっているので、Widget.AppCompat.Spinnerをparentにして、必要な項目について上書きすればOKです。Widget.AppCompat.Spinnerを見てみると、


values.xml

<style name="Base.Widget.AppCompat.Spinner" parent="android:Widget.Spinner">

<item name="android:background">@drawable/abc_spinner_mtrl_am_alpha</item>
<item name="android:dropDownSelector">?attr/listChoiceBackgroundIndicator</item>
<item name="android:dropDownVerticalOffset">0dip</item>
</style>

となっていて、 android:backgroundandroid:dropDownSelector が設定変更できるとわかります。

なので、例えば自分のアプリの values/style.xmlに以下を設定してあげます。


style.xml

<resources xmlns:android="http://schemas.android.com/apk/res/android">

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- 上書きする設定 -->
<item name="android:spinnerStyle">@style/MySpinnerAppTheme</item>
以下略
</style>
<!-- Widget.AppCompat.Spinnerを親にして上書きする -->
<style name="MySpinnerAppTheme" parent="@style/Widget.AppCompat.Spinner">
<item name="android:background">@drawable/my_drop_down</item>
<item name="android:dropDownSelector">@drawable/my_spinner_style</item>
</style>

こうすると、Spinnerのスタイルをカスタマイズすることができます。

ここのUIのスタイル変更したいんだけど、どの項目変えたらいいんじゃい、という時はこの設定を思い出してみてください。