UI设计中,按钮一般都会有多个状态,比如:聚焦、点击等,不同的状态必须显示不同的呈现形式(比如颜色、形状的改变),这样用户才能感觉到按钮被成功选中、点击了,否则用户体验就会非常差了。


本篇文章就简单地描述一下Android开发中,如何动态改变Button状态切换时的背景。


Android的UI设计中,默认情况下,系统会为Button的点击实现一个默认的背景切换。


例如下面这样的一个Button:



用户在点击Button的时候,会有一个蓝色外框显示出来,表明Button被点击了。如图所示:



但是,如果想为Button添加自定义的图片背景,如:


android:background="@drawable/upload"


那么,当你点击Button的时候会发现,Button啥反应都没有,在用户点击的时候Button的背景没有任何变化,用户无法知道到底点击成功了没有,所以,这不是一个好的用户体验。


当然,这种情况可以考虑使用ImageButton,如:



ImageButton会将src所指的图片缩小放入Button的方框内中央显示,Button点击前后的显示效果如图所示:

上面是采用系统默认的Button点击效果,那么,如果期望自己定义Button的点击效果,该如何实现呢?下面,我将介绍两种在Button被点击时改变背景的方式,一种是采用多张背景图片切换的方式,另一种是采用shape来定义Button状态切换的背景显示。


1.  多张背景图片切换


首先,为Button准备两张背景图片,一张是Button未点击时显示的图片,另一张是Button被点击时显示的图片,如图所示:


然后,在工程的res/drawable目录下创建一个 xml 文件,这里命名为:button_selector.xml


内容如下:


<?xml version="1.0" encoding="utf-8"?>         


说明:这里的selector标签就相当与Button状态的选择器,每一个item子项代表着Button的一种状态,这里我只选取了两种状态做示例,一种是Button被点击,另一种是Button未被点击。全部的Button状态可以参考Google Android Development相关网页:StateListDrawable


然后,在Button的标签中,把 background 属性的值改为 button_selector 即可:


android:background="@drawable/button_selector"


可以运行程序试试,当点击Button后,是不是Button的背景从左图变化成为右图了?


这种方法是比较直观简单的方法,在实际的工程中也大量使用,但也有一个缺陷,必须为所有的Button准备多张背景图片,为每一个状态准备一张,加大了UI设计的工作量,也加大了程序的大小。


2. 通过shape来自定义Button的UI显示


首先,定义两个xml文件,分别为shape_normal.xml ,shape_pressed.xml


文件中,定义shape的属性,shape的原理参考Google Android官方文档:


(1)shape_normal.xml


<?xml version="1.0" encoding="utf-8"?>    


(2) shape_pressed.xml


<?xml version="1.0" encoding="utf-8"?>    


然后,依然定义一个 button_selector.xml文件,只不过该selector的android:drawable所指的内容,由图片改为shape文件。


<?xml version="1.0" encoding="utf-8"?>                                                                                                                                                                 


然后,将所需的Button的background依然指向该selector文件,即可实现自定义Button点击的背景切换效果.


采用这种方式的Button点击前后的效果如图所示:



shape可以定义的内容很丰富,包括圆角的设置,线条的粗细等等,这里不一一演示,可以自己修改后测试效果。


ImageButton也可以采用这种方法来自定义Button点击的背景颜色切换效果,不过要注意为ImageButton添加一个android:padding属性,使得src的图片与Button的边界有一定的距离,这样才能动态改变背景,因为ImageButton能改变的颜色只是src图片以外的背景区域,图片本身的颜色是不会变的。



效果如图:

   这篇文章就写到这儿了,本文主要描述了如何为Button的点击动态改变背景,主要通过selector来实现,而具体的呈现形式可以通过多个图片背景切换,或者通过Shape标签来定义。文中有不清楚的地方欢迎留言讨论或者来信lujun.hust@gmail.com交流,或者关注我的新浪微博 @卢_俊 获取最新的文章和资讯。



更多相关文章

  1. 教你如何使用android studio发布release 版本(完整版)
  2. Android:自定义输入法(输入密码时防止第三方窃取)
  3. Android(安卓)Studio 使用USB真机调试教程
  4. Android自定义View你所要知道的(一):坐标系
  5. android 自定义圆形进度条(一)
  6. android点击本地缩略图,弹出显示服务器原图
  7. 【Android】Webview使用自定义的javascript进行回调
  8. Android自定义View之基本API(一)
  9. 自定义样式日期时间选择对话框控件(精简版)

随机推荐

  1. ubuntu 下基于源码的android平台搭建与内
  2. View事件体系(Android开发艺术探索读书笔
  3. android 简单的相册查看器
  4. Activity面试详解
  5. Android调试之LOG和LOGCAT详解
  6. Android中SharePreferences的简单实现
  7. 安卓定时刷新界面
  8. Android开发指南(31) —— Multimedia an
  9. Android自定义View实现HTML图文环绕效果
  10. GitHub上几种Android表格控件