まとめ
- ボタンの文字は android:textAppearanceButton(文字サイズは 14sp、文字色は textColorPrimary)
- ボタンの色は colorButtonNormal
- 4以下にも適用される
- テーマ直下の属性なので、全部のボタンに適用されてしまうのが難点
1. 背景が Light でボタンのテキストが Dark
- <style name="AppTheme" parent="Theme.AppCompat.Light">
- <item name="colorButtonNormal">#2196F3</item>
- </style>

2. 背景が Light でボタンのテキストが Dark(Disabled 時はグレー)
- <style name="AppTheme" parent="Theme.AppCompat.Light">
- <item name="colorButtonNormal">@color/button_color</item>
- </style>
- <?xml version="1.0" encoding="utf-8"?>
- <selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:color="#1E000000" android:state_enabled="false" />
- <item android:color="#2196F3" />
- </selector>

3. 背景が Dark でボタンのテキストが Light
- <style name="AppTheme" parent="Theme.AppCompat">
- <item name="colorButtonNormal">#2196F3</item>
- </style>

4. 背景が Dark でボタンのテキストが Light(Disabled 時はグレー)
- <style name="AppTheme" parent="Theme.AppCompat">
- <item name="colorButtonNormal">@color/button_color</item>
- </style>
- <?xml version="1.0" encoding="utf-8"?>
- <selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:color="#1EFFFFFF" android:state_enabled="false" />
- <item android:color="#2196F3" />
- </selector>

5. 背景が Light でボタンのテキストが Light
- <style name="AppTheme" parent="Theme.AppCompat.Light">
- <item name="colorButtonNormal">#2196F3</item>
- <item name="android:textAppearanceButton">@style/TextAppearance.Button</item>
- </style>
- <style name="TextAppearance.Button" parent="Base.TextAppearance.AppCompat.Button">
- <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
- </style>

6. 背景が Light でボタンのテキストが Light(Disabled 時はグレー)
- <style name="AppTheme" parent="Theme.AppCompat.Light">
- <item name="colorButtonNormal">@color/button_color</item>
- <item name="android:textAppearanceButton">@style/TextAppearance.Button</item>
- </style>
- <style name="TextAppearance.Button" parent="Base.TextAppearance.AppCompat.Button">
- <item name="android:textColor">?android:attr/textColorPrimaryInverse</item>
- </style>
- <?xml version="1.0" encoding="utf-8"?>
- <selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:color="#1E000000" android:state_enabled="false" />
- <item android:color="#2196F3" />
- </selector>

7. 背景が Light でボタンのテキストが Light(Disabled 時は文字もグレー)
- <style name="AppTheme" parent="Theme.AppCompat.Light">
- <item name="colorButtonNormal">@color/button_color</item>
- <item name="android:textAppearanceButton">@style/TextAppearance.Button</item>
- </style>
- <style name="TextAppearance.Button" parent="Base.TextAppearance.AppCompat.Button">
- <item name="android:textColor">@color/button_text_color</item>
- </style>
- <?xml version="1.0" encoding="utf-8"?>
- <selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:color="#1E000000" android:state_enabled="false" />
- <item android:color="#2196F3" />
- </selector>
- <?xml version="1.0" encoding="utf-8"?>
- <selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:color="@color/primary_text_disabled_material_light" android:state_enabled="false" />
- <item android:color="@color/primary_text_default_material_dark" />
- </selector>

解説
Widget.AppCompat.Button
values.xml
- <style name="Widget.AppCompat.Button" parent="Base.Widget.AppCompat.Button"/>
Base.Widget.AppCompat.Button
values.xml
- <style name="Base.Widget.AppCompat.Button" parent="android:Widget">
- <item name="android:background">@drawable/abc_btn_default_mtrl_shape</item>
- <item name="android:textAppearance">?android:attr/textAppearanceButton</item>
- <item name="android:minHeight">48dip</item>
- <item name="android:minWidth">88dip</item>
- <item name="android:focusable">true</item>
- <item name="android:clickable">true</item>
- <item name="android:gravity">center_vertical|center_horizontal</item>
- </style>
- <style name="Base.Widget.AppCompat.Button" parent="android:Widget.Material.Button"/>
- <style name="Widget.Material.Button">
- <item name="background">@drawable/btn_default_material</item>
- <item name="textAppearance">?attr/textAppearanceButton</item>
- <item name="minHeight">48dip</item>
- <item name="minWidth">88dip</item>
- <item name="stateListAnimator">@anim/button_state_list_anim_material</item>
- <item name="focusable">true</item>
- <item name="clickable">true</item>
- <item name="gravity">center_vertical|center_horizontal</item>
- </style>
textAppearanceButton
values.xml
- <style name="Theme.AppCompat" parent="Base.Theme.AppCompat"/>
- <style name="Base.Theme.AppCompat" parent="Base.V7.Theme.AppCompat">
- <style name="Base.V7.Theme.AppCompat" parent="Platform.AppCompat">
- <item name="android:textAppearanceButton">@style/TextAppearance.AppCompat.Button</item>
- ...
- </style>
- <style name="Base.V7.Theme.AppCompat.Light" parent="Platform.AppCompat.Light">
- <item name="android:textAppearanceButton">@style/TextAppearance.AppCompat.Button</item>
- </style>
- <style name="TextAppearance.AppCompat.Button" parent="Base.TextAppearance.AppCompat.Button"/>
- <style name="Base.TextAppearance.AppCompat.Button">
- <item name="android:textSize">@dimen/abc_text_size_button_material</item>
- <item name="textAllCaps">true</item>
- <item name="android:textColor">?android:textColorPrimary</item>
- </style>
- <style name="Base.TextAppearance.AppCompat.Button">
- <item name="android:textSize">@dimen/abc_text_size_button_material</item>
- <item name="android:textAllCaps">true</item>
- <item name="android:textColor">?android:textColorPrimary</item>
- </style>
values-v21.xml
- <style name="Base.Theme.AppCompat" parent="Base.V21.Theme.AppCompat"/>
- <style name="Base.V21.Theme.AppCompat" parent="Base.V7.Theme.AppCompat">
- ...
- </style>
- <style name="Base.TextAppearance.AppCompat.Button" parent="android:TextAppearance.Material.Button"/>
- <style name="TextAppearance.Material.Widget.Button" parent="TextAppearance.Material.Button" />
- <style name="TextAppearance.Material.Button">
- <item name="textSize">@dimen/text_size_button_material</item>
- <item name="fontFamily">@string/font_family_button_material</item>
- <item name="textAllCaps">true</item>
- <item name="textColor">?attr/textColorPrimary</item>
- </style>
btn_default_material
- <?xml version="1.0" encoding="utf-8"?>
- <!-- Copyright (C) 2014 The Android Open Source Project
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
- <ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:color="?attr/colorControlHighlight">
- <item android:drawable="@drawable/btn_default_mtrl_shape" />
- </ripple>
btn_default_mtrl_shape
- <?xml version="1.0" encoding="utf-8"?>
- <!-- Copyright (C) 2014 The Android Open Source Project
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
- <!-- Used as the canonical button shape. -->
- <inset xmlns:android="http://schemas.android.com/apk/res/android"
- android:insetLeft="@dimen/button_inset_horizontal_material"
- android:insetTop="@dimen/button_inset_vertical_material"
- android:insetRight="@dimen/button_inset_horizontal_material"
- android:insetBottom="@dimen/button_inset_vertical_material">
- <shape android:shape="rectangle">
- <corners android:radius="@dimen/control_corner_material" />
- <solid android:color="?attr/colorButtonNormal" />
- <padding android:left="@dimen/button_padding_horizontal_material"
- android:top="@dimen/button_padding_vertical_material"
- android:right="@dimen/button_padding_horizontal_material"
- android:bottom="@dimen/button_padding_vertical_material" />
- </shape>
- </inset>
0 件のコメント:
コメントを投稿