9

我有一个蓝色背景的按钮样式,在 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

4 回答 4

13

尝试buttonStyle代替android:buttonStyle,因为这是棒棒糖之前的 AppCompat 属性,所以它应该没有 android 前缀。

于 2016-03-14T12:52:48.210 回答
0

我见过一些布局,其中属性被应用了两次,有和没有 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>

我目前正试图找到我以前在哪里看到过这个,以及它为什么有效。让我知道是否有。

于 2015-08-11T20:09:04.847 回答
0

尝试使用 AppCompat:

    <style name="MyApp.Widget.Button" parent="Base.TextAppearance.AppCompat.Button">
     <item name="android:background">@drawable/btn_blue</item>
      ...
    </style>
于 2015-08-11T20:13:56.913 回答
0

@Michał Kisiel 的回答是正确的“尝试buttonStyle而不是android:buttonStyle,因为这是棒棒糖之前的 AppCompat 属性,所以它应该没有 android 前缀。” 我只想补充一点,例如,如果您以编程方式创建视图,您也应该放置 android:buttonStyle 和 buttonStyle,示例:

    <item name="android:buttonStyle">@style/OrangeButton</item>
    <item name="buttonStyle">@style/OrangeButton</item>
于 2017-03-06T15:43:02.227 回答