在我的 android 应用程序中有一个带有绿色背景的圆角矩形按钮。我使用 .xml 文件做到了这一点
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:padding="10dp"
android:shape="rectangle" >
<solid android:color="#B5D397" />
<corners
android:bottomLeftRadius="10dp"
android:bottomRightRadius="10dp"
android:topLeftRadius="10dp"
android:topRightRadius="10dp" />
</shape>
和
android:background="@drawable/rounded_btn"
在布局文件中
但是当我按下按钮时没有显示任何效果(颜色没有变化)所以我使用了
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Button view = (Button) v;
view.getBackground().setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP);
按下后按钮颜色变为深绿色。到这里一切正常,但问题是释放按钮后颜色仍然是深绿色。我希望它像按下之前一样。我提到了几个例子,说在 .xml 文件中使用选择器,即
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:color="#c0c0c0"
android:state_selected="true"/>
<item
android:color="#ffffff"
android:state_pressed="true"/>
<item
android:color="#9A9A9A"
android:state_focused="false"
android:state_pressed="false"
android:state_selected="false"/>
</selector>
这也需要android:background="@drawable/btn_state"
,但我已经用过android:background=@drawable/rounded_btn
那么如何同时发挥这两种效果
我也试过用OnTouchListener
button.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// show interest in events resulting from ACTION_DOWN
if(event.getAction()==MotionEvent.ACTION_DOWN) return true;
// don't handle event unless its ACTION_UP so "doSomething()" only runs once.
if(event.getAction()!=MotionEvent.ACTION_UP) return false;
doSomething();
button.setPressed(true);
return true;
}
});
但这禁用了我的OnclickListener()
方法,我不想使用OnTouchListener()
我知道这很愚蠢,但我是 android 新手,非常感谢