Android 中按钮点击后的效果通常是通过更换图片,或者背景色来实现的。
之前做的一直都是手动写在点击事件里,今天发现了一种更合适的方法,写在xml文件中。
比如,我有两张图片,一张是点击前的before_press,一张是点击后的after_press。
实现的方法:在drawable文件夹中建立一个文档,如button_press.xml
.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:drawable="@drawable/after_press"/>
<item
android:state_pressed="false"
android:drawable="@drawable/before_press"/>
</selector>
然后在按钮处android:background="@drawable/button_selector"
然后点击事件就完成啦。
另外,如果想修改背景颜色,需要在values文件夹中新建colors文件。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="opaque_red">#f00</color>
<color name="background">#FFFFFF</color>
</resources>
然后将drawable改为对应的@color/background
即可。
补充:
直接改变颜色会显得很突兀,所以需要通过一种颜色渐变到方式来达到目的。
定义两个shape,一个没按的,一个按下后的。
shape_normal.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#808080"
android:endColor="#808080"
android:angle="-90"/>
</shape>
shape_pressed.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#FF7F00"
android:endColor="#EE7600"
android:angle="-90"/>
</shape>
然后依然定义button_selector.xml文件
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:drawable="@drawable/shape_pressed"/>
<item
android:state_pressed="false"
android:drawable="@drawable/shape_normal"/>
</selector>
注意,不能直接写类似#FFFFFF 之类的到drawable中