Android按钮在Jellybean上半透明但在Lollipop上没有

时间:2015-02-09 08:22:45

标签: android android-layout android-theme

我有最新的Android Studio和SDK(Compile SDK 21,Build Tools 21.1.2,appcompat v7 21.0.3),并使用空白活动模板制作一个全新的向导应用程序。

然后我只更改XML:根相对布局的背景(android:background =“#00FF00”)并添加一个按钮(使用图形编辑器,不更改按钮)。

这在Lollipop设备上运行良好。在软糖(4.2.2)设备或仿真器上,按钮呈灰色,呈绿色触摸。

这可能是主题(Theme.AppCompat.Light.DarkActionBar)的主题,但它是否应该在Lollipop和Jellybean设备上呈现相同的颜色?

我看到有关手动更改按钮背景的问题(例如How to make button non transparent),这是兼容性问题。

这是完整的xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
android:background="#00FF00">

<TextView android:text="@string/hello_world" android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textView" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="New Button"
    android:id="@+id/button"
    android:layout_below="@+id/textView"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginLeft="26dp"
    android:layout_marginStart="26dp"
    android:layout_marginTop="55dp" />

 </RelativeLayout>

2 个答案:

答案 0 :(得分:1)

AppCompat目前不支持Button小部件,因此Holo主题上的按钮(API级别小于21)的呈现方式与Material主题(API级别21+)不同。你需要定义一个这样的Button样式:

<style name="MyButtonStyle" parent="Base.MyButtonStyle"/>

然后在res / values文件夹中定义Base.MyButtonStyle

<style name="Base.MyButtonStyle" parent="android:Widget.Holo.Button">
    <item name="android:background">@drawable/btn_default</item>
</style>

btn_default drawable将指向按钮的自定义选择器。

在res / values-v21中,您可以像这样定义Base.MyButtonStyle:

<style name="Base.MyButtonStyle" parent="android:Widget.Material.Button"/>

如果要更改21+按钮的正常或按下颜色,则分别在主题中设置colorButtonNormal和colorControlHighlight。

答案 1 :(得分:0)

如果您没有为按钮的xml指定style或添加android:background="yourBackground",则Android会使用您的应用运行的Android版本的默认按钮样式呈现您的按钮。< / p>

例如,如果您将android:background="#FF0000"添加到按钮,则不再存在不同Android版本的(大)差异。