博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态更换view类的背景----StateListDrawable的应用
阅读量:7108 次
发布时间:2019-06-28

本文共 1788 字,大约阅读时间需要 5 分钟。

StateListDrawable可以根据View的不同状态,更换不同的背景

可以应用如EditText,Button等中,以Button为例 

系统中默认的按钮被按下的颜色和未点击时的颜色不一样,该种实现可以用Java代码和XML实现

以Java代码:

//……前面对Button的声明略去okBtn.setBackgroundDrawable(addStateDrawable(this, R.drawable.btn_normal, R.drawable.btn_selected, R.drawable.btn_selected));cancelBtn.setBackgroundDrawable(addStateDrawable(this, R.drawable.btn_normal, R.drawable.btn_selected, R.drawable.btn_selected));//……对应主要的代码 //当对应的View处于不同的状态时,对应的bacdground跟着变化    private StateListDrawable addStateDrawable(Context context,  int idNormal, int idPressed, int idFocused) {        StateListDrawable sd = new StateListDrawable();        Drawable normal = idNormal == -1 ? null : context.getResources().getDrawable(idNormal);        Drawable pressed = idPressed == -1 ? null : context.getResources().getDrawable(idPressed);        Drawable focus = idFocused == -1 ? null : context.getResources().getDrawable(idFocused);        //注意该处的顺序,只要有一个状态与之相配,背景就会被换掉        //所以不要把大范围放在前面了,如果sd.addState(new[]{},normal)放在第一个的话,就没有什么效果了         sd.addState(new int[]{android.R.attr.state_enabled, android.R.attr.state_focused}, focus);        sd.addState(new int[]{android.R.attr.state_pressed, android.R.attr.state_enabled}, pressed);        sd.addState(new int[]{android.R.attr.state_focused}, focus);        sd.addState(new int[]{android.R.attr.state_pressed}, pressed);        sd.addState(new int[]{android.R.attr.state_enabled}, normal);        sd.addState(new int[]{}, normal);        return sd;    }

xml方式实现时,可以先了解下对应xml的语法 

下面对应的具体实例,由于是做背景用,该xml将放于/res/drawable下面(StateList中第一个匹配当前状态的item会被使用。因此,如果第一个item没有任何状态特性的话,那么它将每次都被使用,这也是为什么默认的值必须总是在最后)

在Button的xml中进行加载:

 或在java代码中加载:

okBtn.setBackgroundDrawable(R.drawable.button_drawable);

 

转载地址:http://znvhl.baihongyu.com/

你可能感兴趣的文章
Java反射与注解
查看>>
判断一个数是否为回文数,字符串是否为回文字符串
查看>>
Windows Live Writer 2009 客户端离线写51CTO博客
查看>>
date_default_timezone_set的问题
查看>>
不安装oracle客户端,用plsql连接oracle
查看>>
让孩子爱上学习-获取安卓
查看>>
[iOS Animation]CALayer-图层时间 二
查看>>
更新日志 - fir.im 回归,上线 Android Studio 插件
查看>>
我的友情链接
查看>>
spring遇到的异常整理
查看>>
解决:Disk /dev/sdb doesn't contain a valid partition table
查看>>
GoldenGate版本兼容知识汇总
查看>>
Java 函数
查看>>
企业工商信息数据接口
查看>>
北京15家颜值爆表的餐厅!90%的妹纸来这里都不是为了吃饭
查看>>
消息队列(三)RocketMQ消息顺序和消息重复
查看>>
VMWARE 7 USB设备的服务VMware USB Arbitration 无法启动,解决
查看>>
Arms是一个整合了大量主流开源项目的Android Mvp快速搭建框架
查看>>
下一代大数据计算引擎之争,你更看好 Spark 还是 Flink?
查看>>
上下文交换
查看>>