Стиль кнопок работает в Android 5, но не в 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.
4 ответа
Пытаться buttonStyle
вместо android:buttonStyle
, поскольку это атрибут AppCompat pre Lollipop, поэтому он должен быть без префикса Android.
@ Михал Кисель ответ правильный "Попробуйте buttonStyle
вместо android:buttonStyle
, поскольку это атрибут AppCompat перед Lollipop, поэтому он должен быть без префикса android."Я просто хочу добавить, что если вы, например, создаете представление программно, вы должны также поставить android: buttonStyle и buttonStyle, пример:
<item name="android:buttonStyle">@style/OrangeButton</item>
<item name="buttonStyle">@style/OrangeButton</item>
Я видел несколько макетов, где атрибуты применяются дважды, с префиксом 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>