主题 class 使用 AppCompat 扩展视图(按钮)
Theming class extends View (Button) with AppCompat
我已经在我的 XML 中声明了 Button
:
<Button
android:id="@+id/custom_id"
android:theme="@style/BlueButtonTheme"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/custom_string"/>
most 重要的一行是 BlueButtonTheme
:
的样式
<style name="BlueButtonTheme" parent="AppTheme">
<item name="android:buttonStyle">@style/BlueButtonStyle</item>
<item name="buttonStyle">@style/BlueButtonStyle</item>
<item name="colorAccent">@color/blue_dark</item>
<item name="colorControlActivated">@color/blue_dark</item>
<item name="colorControlHighlight">@color/blue_dark</item>
<item name="colorButtonNormal">@color/blue</item>
<item name="android:colorAccent">@color/blue_dark</item>
<item name="android:colorControlActivated">@color/blue_dark</item>
<item name="android:colorControlHighlight">@color/blue_dark</item>
<item name="android:colorButtonNormal">@color/blue</item>
<item name="android:textColor">@color/white</item>
</style>
<style name="BlueButtonStyle" parent="Widget.AppCompat.Button.Colored">
<item name="colorAccent">@color/blue_dark</item>
<item name="colorControlActivated">@color/blue_dark</item>
<item name="colorControlHighlight">@color/blue_dark</item>
<item name="colorButtonNormal">@color/blue</item>
<item name="android:colorAccent">@color/blue_dark</item>
<item name="android:colorControlActivated">@color/blue_dark</item>
<item name="android:colorControlHighlight">@color/blue_dark</item>
<item name="android:colorButtonNormal">@color/blue</item>
<item name="android:textColor">@color/white</item>
</style>
并且 Button
在所有 os 版本中都是蓝色的,很好...现在我想创建自定义 MyButton extends Button
,但是当我在 XML 中设置时:
<com.package.name.MyButton
android:id="@+id/custom_id"
android:theme="@style/BlueButtonTheme"
...
小部件将在例如Android 4.1(物理测试设备),但 pressed/selected 时有白色文本和一点蓝色。 5.0 及以上版本有效。我的按钮没有任何额外的逻辑(目前),只有一组构造函数。如何为扩展 Button
?
的自定义小部件应用工作主题
几个小时的尝试和发布上述问题后 10 分钟,我找到了正确的答案:extends AppCompatButton
(来自支持 v7),而不是 android.widget.Button
我已经在我的 XML 中声明了 Button
:
<Button
android:id="@+id/custom_id"
android:theme="@style/BlueButtonTheme"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/custom_string"/>
most 重要的一行是 BlueButtonTheme
:
<style name="BlueButtonTheme" parent="AppTheme">
<item name="android:buttonStyle">@style/BlueButtonStyle</item>
<item name="buttonStyle">@style/BlueButtonStyle</item>
<item name="colorAccent">@color/blue_dark</item>
<item name="colorControlActivated">@color/blue_dark</item>
<item name="colorControlHighlight">@color/blue_dark</item>
<item name="colorButtonNormal">@color/blue</item>
<item name="android:colorAccent">@color/blue_dark</item>
<item name="android:colorControlActivated">@color/blue_dark</item>
<item name="android:colorControlHighlight">@color/blue_dark</item>
<item name="android:colorButtonNormal">@color/blue</item>
<item name="android:textColor">@color/white</item>
</style>
<style name="BlueButtonStyle" parent="Widget.AppCompat.Button.Colored">
<item name="colorAccent">@color/blue_dark</item>
<item name="colorControlActivated">@color/blue_dark</item>
<item name="colorControlHighlight">@color/blue_dark</item>
<item name="colorButtonNormal">@color/blue</item>
<item name="android:colorAccent">@color/blue_dark</item>
<item name="android:colorControlActivated">@color/blue_dark</item>
<item name="android:colorControlHighlight">@color/blue_dark</item>
<item name="android:colorButtonNormal">@color/blue</item>
<item name="android:textColor">@color/white</item>
</style>
并且 Button
在所有 os 版本中都是蓝色的,很好...现在我想创建自定义 MyButton extends Button
,但是当我在 XML 中设置时:
<com.package.name.MyButton
android:id="@+id/custom_id"
android:theme="@style/BlueButtonTheme"
...
小部件将在例如Android 4.1(物理测试设备),但 pressed/selected 时有白色文本和一点蓝色。 5.0 及以上版本有效。我的按钮没有任何额外的逻辑(目前),只有一组构造函数。如何为扩展 Button
?
几个小时的尝试和发布上述问题后 10 分钟,我找到了正确的答案:extends AppCompatButton
(来自支持 v7),而不是 android.widget.Button