这几天在做一个小软件,做的按钮本来是干巴巴的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>