所以我正在制作一个带有3个按钮的应用程序。目前我有以下.xml文件,使它们具有圆角边缘并且是红色。现在我想制作它们,如果选择了一个,那么该按钮变为绿色而其他两个保持不变,或者变回红色。我怎么能这样做?我是否必须制作另一个.xml文件? 这是按钮的可绘制.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" android:padding="10dp">
<!--red colour.-->
<solid android:color="#FF0000"/>
<corners
android:bottomRightRadius="10dp"
android:bottomLeftRadius="10dp"
android:topLeftRadius="10dp"
android:topRightRadius="10dp"/>
<stroke android:width="2px" android:color="#000000"/>
</shape>
答案 0 :(得分:2)
使用selector
,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- green state -->
<item
android:drawable="@drawable/button_selected"
android:state_selected="true"></item>
<!-- green state -->
<item
android:drawable="@drawable/button_pressed"
android:state_pressed="true"></item>
<!-- red state -->
<item
android:drawable="@drawable/button_disabled"></item>
</selector>
然后,您应该将此选择器称为:
<Button
...
android:background="@drawable/my_selector" />
为每个州创建每个drawable.xml
(作为红色按钮的示例): button_selected , button_pressed 和 button_disabled 。
您也可以使用onTouchListener
来保持状态:
button.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// change the color
return true;
case MotionEvent.ACTION_UP:
// intitial color
return true;
default:
return false;
}
}
});
但是,最好使用Selector
和background
,这样可以减少资源占用。
更新:
您可以使用setBackgroundResource
方法保留并更改点击按钮的背景状态,如下所示:
// 1st clicklistener method
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
v.setBackgroundResource(R.drawable.green_drawable);
button2.setBackgroundResource(R.drawable.selector_drawable);
}
}
// 2nd clicklistener method
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
v.setBackgroundResource(R.drawable.green_drawable);
button1.setBackgroundResource(R.drawable.selector_drawable);
}
}
未经测试但应该可以使用。