设置button的按下和选中效果

时间:2024-03-17 19:45:42

  这几天在做一个小软件,做的按钮本来是干巴巴的Button,就是白底黑字的按钮,但是背景用图片做了,按钮还是这样就很不美观了。我想到了用ImageButton,但是又发现不能设置文字而且ImageButton的图片不能自适应大小,难不成要自己按照分辨率做一个带文字的图片?这样明显不行,最后还是在别人的一个仿微信的软件的源码里找到了答案。近乎完美地解决了我的问题,不仅可以在图片上添加文字,而且图片可以自适应不通的分辨率,同时可以增加按下和选中(获得焦点)效果,忍不住赞一个。在这里记录一下。

  一般初学安卓,我们的Button的设置都是ID、layoutwidth、layoutheight、text等,需要的时候可以设置background,但是初学一般background引用的就是一个图片

1 android:backgronud="@drawable/pic0"

   这样显然太过死板了,而且不能很好地匹配不同的手机屏幕。那么如何解决呢?

   这里就是利用这个background的引用,设置一个Button.xml

1 <?xml version="1.0" encoding="UTF-8"?>
2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 
4     <item android:drawable="@drawable/focused" android:state_focused="true"/>
5     <item android:drawable="@drawable/pressed" android:state_pressed="true"/>
6     <item android:drawable="@drawable/pressed" android:state_selected="true"/>
7     <item android:drawable="@drawable/normal"/>
8 
9 </selector>

  然后在Button的background后面引用这个Button.xml

1 android:background="@drawable/Button"

  这样以来这个Button就拥有了按下和选中效果,同时也可以*设置text。

 

 


 

  下面是一个例子,两个Button,可以检验选中和按下效果,没有设置text,可以自行添加。

main.xml

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <Button
 8         android:layout_width="50dp"
 9         android:layout_height="50dp"
10         android:background="@drawable/button" />
11 
12     <Button
13         android:layout_width="50dp"
14         android:layout_height="50dp"
15         android:background="@drawable/button" />
16 
17 </LinearLayout>

button.xml

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

    <item android:drawable="@drawable/p1" android:state_focused="true"/>
    <item android:drawable="@drawable/p2" android:state_pressed="true"/>
    <item android:drawable="@drawable/p2" android:state_selected="true"/>
    <item android:drawable="@drawable/p0"/>

</selector>