我尝试使用可配置颜色的按钮来实现默认和按下状态以及圆角。这是我在SO上找到的解决方案,似乎它在我的真实测试设备上运行良好:
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都会画出这样的黑角:
你能否解释一下这里的错误,这样的情况会出现在真实设备上,而不仅仅是模拟器?
答案 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