Drawable(6)关于StateList的补充
模板:
1 <?xml version="1.0" encoding="utf-8"?> 2 <selector xmlns:android="http://schemas.android.com/apk/res/android" 3 android:constantSize=["true" | "false"] 4 android:dither=["true" | "false"] 5 android:variablePadding=["true" | "false"] > 6 7 <item android:drawable="@[package:]drawable/drawable_resource" 8 android:state_pressed=["true" | "false"] 9 10 android:state_focused=["true" | "false"] 11 12 android:state_hovered=["true" | "false"] 13 14 android:state_selected=["true" | "false"] 15 16 android:state_checkable=["true" | "false"] 17 18 android:state_checked=["true" | "false"] 19 20 android:state_enabled=["true" | "false"] 21 22 android:state_activated=["true" | "false"] 23 24 android:state_window_focused=["true" | "false"] /> 25 26 </selector>
和属性含义:
<selector>属性 | |
android:constantSize=["true" | "false"] | item里面指定的drawable图片大小是否固定值,true表示图片居中按固定大小显示,false表示会绽放 |
android:dither=["true" | "false"] |
是否让系统来帮我们处理颜色差异,一般android系统中使用的颜色是ARGB_8888, 但很多显示设置是RGB_565,这个ARGB_8888与RGB_565有什么区别呢。这个ARGB_8888也就 是说每一个像素点要拿4个字节来保存,依次每个字节是A8个字节,R8个字节,G8个字节,B8个字 节,来保存,而RGB_565它只用了两个字节来保存颜色,两个字节总共16位,前5位保存R,中间6位 保存G,后5位保存B. |
android:variablePadding |
这个是可变的填充,这个有什么用呢?这个就是,在当当前这个组件被selected的时候, 比如某一个tab被selected,或者listView里面的个item被selected的时候,如果设置为true的话, 那么被选的这个tab或item的填充就会变大,使得看上去与其它的tab或item不一样。 |
<item>的属性 | |
android:drawable="@[package:]drawable/drawable_resource" | 一般都为图片资源 |
android:state_pressed=["true" | "false"] | 被按下状态开头,前提是有。true表示开启按下状态 |
android:state_focused=["true" | "false"] | 高亮,焦点的时候的状态开头 |
android:state_hovered=["true" | "false"] |
这个是api等组在14以上才有的,这个是当光标移动到某一个组件之上的时候的状态, 到目前为止,还没有看见过哪个手机设备带有鼠标之类的东西, 可能这个专门是为平板电脑设置的或者以后可能出现带有鼠标之类的设备而准备的吧, 文档中说,一般这个值设置为与focused这个值一样。 |
android:state_selected=["true" | "false"] |
这个是当一个tab被打开的状态。或者一个listView等里面一个item被选择的时候的状态, 因此这个属性设置在一般的组件上面是没有用的,只有设置有作为tab或item的布局里面的项时, 这个属才起作用. |
android:state_checkable=["true" | "false"] |
这个是当一个组件在可以checked或不可以checked的时候的状态,现在较常见的, 能够checkable的组件有,单选项和多选项,所以这个属性只有设置在像这类组件上面才有作用的。 |
android:state_checked=["true" | "false"] |
这个是当一个组件被checked 或者没有checked 的时候的状态,也就是说只有在可checkable 上面的组件才有作用的,一般常见的就是多选按钮组与单选按钮组里面的项,这个才有作用的。 |
android:state_enabled=["true" | "false"] |
这个是当一个组件是否能处理touch或click事件的时候的状态,如果要对组件能否响应事件设 置不同背景的时候,就要靠这个属性了. |
android:state_window_focused=["true" | "false"] |
这个是是否对当前界面是否得到焦点的两种状态的设置,比如说当我们打开一个界面, 那么这个界面就获得了焦点,如果我们去把“通知”拉下来,那么这个界面就失去焦点, 或者弹出了一个对话框,那么这个界面也失去焦点了。 |
注意:
最后文档特别提醒:系统是从上往下匹配的,如果匹配到一个item那么它就将采用这个item,而不是采用的最佳匹配的规则,所以设置缺省的状态,一定要写在最后,很多人为了保险起见,一开始就把缺省的写好,那么这样后面所有的item就都不会起作用了,还会因此找不着哪里出了问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
2015-08-15 linux环境变量(转)
2015-08-15 NDK(4)"Unresolved inclusion jni.h”的解决方法