使用style.xml自定义button效果
声明:转载请注明原作文章出处
今天在处理按钮自定义效果时,希望只用一组效果图片可以应用在所用的按钮上。一开始使用的是ImageButton,而后发现ImageButton上不能添加文字,虽然网上找到说什么的ImageButton可以直接继承TextView,但却没用给出方法。因为懒得重写一个自己的Button类,苦苦寻找其他方法,终于发现可以使用style.xml资源,而且功能还相当强大,这里只使用的很小一部分功能。
首先给出ImageButton使用android:src设置特定效果的例子:
布局文件中的ImageButton部分
<ImageButton
android:id="@+id/showdiy_btshow" //自己定义的id
android:text="@string/showdiy_btnshow" //用到的text,写在strings.xml资源文件中
android:src="@drawable/imagebutton_handler" //用到的xml资源文件
android:layout_width="80px"
android:layout_height="wrap_content"
/>
在res/drawable目录下的 imagebutton_handler.xml 文件名可以自己定义:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="false" android:state_focused="false"
android:drawable="@drawable/btn_normal" /> <item android:state_pressed="true" android:drawable="@drawable/btn_selected" /> <item android:state_focused="true" android:drawable="@drawable/btnselect" /> </selector>
笔者的理解是这事一个资源选择器,根据不同的条件,选择不同的资源。使用这个选择器可以在按钮发生 失去焦点、获得焦点、按下 这3个事件时使用3张不同的图片来组成你想要的效果。
android:darwable= 之后的都是在res/darwable中的图片资源
之后是使用style.xml资源使得Button也能达到我们想要的效果:
Button的好处就是可以使用text,这样只需要3张背景图片,就可以应用到所有你需要的按钮上了
布局文件中的Button部分
<Button
android:id="@+id/showdiy_btshow" //自己定义的id
android:text="@string/showdiy_btnshow" //用到的text,写在strings.xml资源文件中
style="@style/mybutton_sytle" //使用自定义的style.xml资源文件
android:layout_width="80px"
android:layout_height="wrap_content"
/>
style.xml文件放在/res/values目录下
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="mybutton_sytle">
//这里的imagebutton_handler就是上部分用到的imagebutton_handler.xml
<item name="android:background">@drawable/imagebutton_handler</item> </style> </resources>
这样就完成了一组背景图片应用到所有按钮上的效果了。
修正:
Button 控件不是用style.xml资源也可以达到同样的效果如下修改:
<Button
android:id="@+id/showdiy_btshow" //自己定义的id
android:text="@string/showdiy_btnshow" //用到的text,写在strings.xml资源文件中
android:background="@drawable/imagebutton_handler" //可以直接使用drawable 下的xml资源文件
android:layout_width="80px"
android:layout_height="wrap_content"
/>
如有问题 欢迎来信指正,交流 E-mail:chengping.xia@gmail.com