按钮样式适用于 Android 5 但不适用于 Android 4
Button style working in Android 5 but not Android 4
我有一个蓝色背景的按钮样式,在 API 22 中工作正常,但在 Android 4 中没有应用样式的相同按钮显示为深灰色。这是我的样式:
<style name="MyApp.Plain" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/background</item>
<item name="android:buttonStyle">@style/MyApp.Widget.Button</item>
</style>
<style name="MyApp.Widget.Button" parent="@android:style/Widget.Button">
<item name="android:background">@drawable/btn_blue</item>
<item name="android:focusable">true</item>
<item name="android:clickable">true</item>
<item name="android:textStyle">bold</item>
<item name="android:textSize">14sp</item>
<item name="android:textColor">#fff</item>
<item name="android:gravity">center_vertical|center_horizontal</item>
</style>
我的btn_blue.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btn_disabled" android:state_enabled="false"/>
<item android:drawable="@drawable/btn_pressed" android:state_enabled="true" android:state_pressed="true"/>
<item android:drawable="@drawable/btn_normal_blue" android:state_enabled="true"/>
</selector>
和btn_normal_blue.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<gradient
android:angle="90"
android:endColor="#368ac6"
android:startColor="#0e58a4" />
<corners android:radius="20dp" />
</shape>
造成这种行为的原因是什么?我该如何解决?
编辑:这不适用于支持 v7:22.2.0,但适用于 v7:21.0.3。除了依赖项,我没有做任何更改,而是将 AppCompatActivity 更改为 ActionBarActivity。
这可能是一个 Android 错误。
我看到一些布局应用了两次属性,有和没有 Android 前缀。你能试试这个吗:
<style name="MyApp.Widget.Button" parent="@android:style/Widget.Button">
<item name="android:background">@drawable/btn_blue</item>
<item name="background">@drawable/btn_blue</item>
<item name="android:focusable">true</item>
<item name="android:clickable">true</item>
<item name="android:textStyle">bold</item>
<item name="android:textSize">14sp</item>
<item name="android:textColor">#fff</item>
<item name="android:gravity">center_vertical|center_horizontal</item>
</style>
我目前正试图找到我以前在哪里看到过它,以及它为什么起作用。如果有,请告诉我。
尝试使用 AppCompat:
<style name="MyApp.Widget.Button" parent="Base.TextAppearance.AppCompat.Button">
<item name="android:background">@drawable/btn_blue</item>
...
</style>
尝试使用 buttonStyle
而不是 android:buttonStyle
,因为这是 Lollipop 之前的 AppCompat 属性,所以它应该没有 android 前缀。
@Michał Kisiel 回答正确"Try buttonStyle
instead of android:buttonStyle
, since this is AppCompat attribute pre Lollipop, so it should be without android prefix."
我只想 添加 如果你例如 以编程方式创建视图 你应该把 android:buttonStyle 和 buttonStyle,示例:
<item name="android:buttonStyle">@style/OrangeButton</item>
<item name="buttonStyle">@style/OrangeButton</item>
我有一个蓝色背景的按钮样式,在 API 22 中工作正常,但在 Android 4 中没有应用样式的相同按钮显示为深灰色。这是我的样式:
<style name="MyApp.Plain" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/background</item>
<item name="android:buttonStyle">@style/MyApp.Widget.Button</item>
</style>
<style name="MyApp.Widget.Button" parent="@android:style/Widget.Button">
<item name="android:background">@drawable/btn_blue</item>
<item name="android:focusable">true</item>
<item name="android:clickable">true</item>
<item name="android:textStyle">bold</item>
<item name="android:textSize">14sp</item>
<item name="android:textColor">#fff</item>
<item name="android:gravity">center_vertical|center_horizontal</item>
</style>
我的btn_blue.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btn_disabled" android:state_enabled="false"/>
<item android:drawable="@drawable/btn_pressed" android:state_enabled="true" android:state_pressed="true"/>
<item android:drawable="@drawable/btn_normal_blue" android:state_enabled="true"/>
</selector>
和btn_normal_blue.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<gradient
android:angle="90"
android:endColor="#368ac6"
android:startColor="#0e58a4" />
<corners android:radius="20dp" />
</shape>
造成这种行为的原因是什么?我该如何解决?
编辑:这不适用于支持 v7:22.2.0,但适用于 v7:21.0.3。除了依赖项,我没有做任何更改,而是将 AppCompatActivity 更改为 ActionBarActivity。
这可能是一个 Android 错误。
我看到一些布局应用了两次属性,有和没有 Android 前缀。你能试试这个吗:
<style name="MyApp.Widget.Button" parent="@android:style/Widget.Button">
<item name="android:background">@drawable/btn_blue</item>
<item name="background">@drawable/btn_blue</item>
<item name="android:focusable">true</item>
<item name="android:clickable">true</item>
<item name="android:textStyle">bold</item>
<item name="android:textSize">14sp</item>
<item name="android:textColor">#fff</item>
<item name="android:gravity">center_vertical|center_horizontal</item>
</style>
我目前正试图找到我以前在哪里看到过它,以及它为什么起作用。如果有,请告诉我。
尝试使用 AppCompat:
<style name="MyApp.Widget.Button" parent="Base.TextAppearance.AppCompat.Button">
<item name="android:background">@drawable/btn_blue</item>
...
</style>
尝试使用 buttonStyle
而不是 android:buttonStyle
,因为这是 Lollipop 之前的 AppCompat 属性,所以它应该没有 android 前缀。
@Michał Kisiel 回答正确"Try buttonStyle
instead of android:buttonStyle
, since this is AppCompat attribute pre Lollipop, so it should be without android prefix."
我只想 添加 如果你例如 以编程方式创建视图 你应该把 android:buttonStyle 和 buttonStyle,示例:
<item name="android:buttonStyle">@style/OrangeButton</item>
<item name="buttonStyle">@style/OrangeButton</item>