Android按钮选择器背景颜色

时间:2014-03-17 14:31:15

标签: android android-button

我尝试使用可配置颜色的按钮来实现默认和按下状态以及圆角。这是我在SO上找到的解决方案,似乎它在我的真实测试设备上运行良好:

enter image description here

    GradientDrawable gradientStateNormal = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[]
            {buttonBaseBgColor, buttonBaseBgColor});
    gradientStateNormal.setShape(GradientDrawable.RECTANGLE);
    gradientStateNormal.setCornerRadius(cornerRadiusPX);

    GradientDrawable gradientStatePressed = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[]
            {colorLight, colorLight});
    gradientStatePressed.setShape(GradientDrawable.RECTANGLE);
    gradientStatePressed.setCornerRadius(cornerRadiusPX);

    StateListDrawable states = new StateListDrawable();
    states.addState(new int[] {android.R.attr.state_pressed},gradientStatePressed);
    states.addState(StateSet.WILD_CARD, gradientStateNormal);
    signUpButton.setBackground(states);

但是按下按钮后,Android 4.3和4.4 Emulators都会画出这样的黑角:

enter image description here

你能否解释一下这里的错误,这样的情况会出现在真实设备上,而不仅仅是模拟器?

1 个答案:

答案 0 :(得分:2)

您可以使用xml本身来完成此操作。 创建一个xml文件,例如:shape.xml,如下所示:

 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android" >

<gradient android:angle="180"
    android:startColor="#FFFF00"
    android:centerColor="#FFFF00"
    android:endColor="#FFFF00"/>

<corners 
    android:radius="20dp"/>

<padding
    android:bottom="10dp"
    android:left="10dp"
    android:right="10dp"
    android:top="10dp" />

<stroke
    android:width="2dp"
    android:color="#000000" />

</shape>

现在使用此xml作为main.xml中按钮的背景,如下所示:

 android:background="@drawable/shape