博客
关于我
selector
阅读量:219 次
发布时间:2019-02-28

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

Android状态选择器详解

1. 状态选择器的作用

状态选择器(StateListDrawable)是Android系统中一个强大的工具,用于为UI组件根据不同的状态定义不同的视觉效果。通过状态选择器,可以为View在不同状态下设置不同的背景图像或颜色,从而提升用户体验。

2. 常见状态定义

Android定义了多种状态,可以让View根据状态切换不同的外观。以下是常见的状态定义:

  • android:drawable:为View设置默认的背景图像或颜色。
  • android:state_pressed:表示View被按下(如按钮)。
  • android:state_focused:表示View获得焦点(如文本框)。
  • android:state_window_focused:表示应用程序是否在前台。
  • android:state_selected:表示View被选中(如ListView中的项)。
  • android:state_checkable:表示View是否可以被选中。
  • android:state_checked:表示View已经被选中(如RadioButton)。
  • android:state_enabled:表示View是否能接收触摸或点击事件。

3. Focused与Selected的区别

  • Focused状态:通常由按键操作引起,一个窗口只能有一个View获得焦点。
  • Selected状态:由应用程序主动调用setSelected()控制,可以有多个View处于selected状态。

4. 常用组件的状态设置

4.1 Checkbox设置

4.2 ImageButton设置

4.3 Button设置

4.4 TextView设置

5. StateListDrawable类功能

5.1 类结构

public class StateListDrawable extends DrawableContainer {    // DrawableContainer是Drawable的子类,用于管理多个Drawable对象}public class DrawableContainer extends Drawable implements Callback {    // Callback接口用于定义Drawable的回调方法}

5.2 常用方法

  • addState方法:用于为特定的状态集合设置Drawable图片资源。

    stalistDrawable.addState(new int[]{pressed, window_focused}, getResources().getDrawable(R.drawable.guide_1));
  • drawableStateChanged方法:根据当前View的状态属性值更新Drawable对象。

  • getState方法:获取当前View的状态属性值并返回状态集合。

  • setState方法:根据提供的状态集合更新Drawable对象,并触发状态变化回调。

6. 状态切换的实现

状态切换主要通过以下步骤实现:

  • 获取当前状态集合:调用getDrawableState()方法获取当前View的状态属性值。
  • 更新Drawable对象:调用setState()方法,根据新的状态集合找到匹配的Drawable对象。
  • 刷新View:调用invalidateSelf()方法刷新View的外观。
  • 7. 动态创建StateListDrawable

    除了使用XML文件,开发者还可以通过程序matic方式创建StateListDrawable对象:

    StateListDrawable stalistDrawable = new StateListDrawable();stalistDrawable.addState(new int[]{pressed, window_focused}, getResources().getDrawable(R.drawable.guide_1));// 其他添加状态的操作...Drawable mBackground = stalistDrawable;mBackground.setCallback(this); // 设置回调this.setBackgroundDrawable(null); // 去掉默认背景

    8. TextView颜色设置

    8.1 通过方法设置

    tv.setTextColor(Color.parseColor("#FFFFFF")); // 通过argb值设置tv.setTextColor(Color.rgb(255, 255, 255)); // 通过颜色分量设置tv.setTextColor(getResources().getColor(R.color.my_color)); // 通过资源引用设置

    8.2 通过ColorStateList设置

    Resources resource = getBaseContext().getResources();ColorStateList csl = (ColorStateList) resource.getColorStateList(R.color.my_color);if (csl != null) {    tv.setTextColor(csl);}

    8.3 通过XML文件设置

    #FFFFFF

    通过上述方法,开发者可以根据需求灵活设置TextView的颜色。

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

    你可能感兴趣的文章
    python在使用HTMLTestRunner时,报告为空,错误提示<_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf_8'>...
    查看>>
    python在gpu上运行_【python】python开启GPU加速
    查看>>
    Python在def函数中使用for循环
    查看>>
    Python在def函数中使用for循环
    查看>>
    Python在Conda环境中,但在Windows虚拟环境中没有激活
    查看>>
    python系列【仅供参考】:python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法
    查看>>
    python图像条状状噪声,使用PYTHON PIL从验证码图像中删除背景嘈杂的线条
    查看>>
    Python图像处理:从内存加载jpeg
    查看>>
    python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
    查看>>
    python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
    查看>>
    python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
    查看>>
    python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
    查看>>
    Python哪个版本最稳定好用2023.10.19
    查看>>
    Python和黑客技术的渊源
    查看>>
    Python和RF编写接口自动化
    查看>>
    Python和RF编写web自动化
    查看>>
    python和js哪个难_【Python】记一次学习,Python 与 js 在实现闭包时的差异
    查看>>
    python和java哪个更值得学——来自知乎高赞回答
    查看>>
    python和c混合编程 github_在pycharm中使用git版本管理以及同步github的方法
    查看>>
    python命名空间更改_Python模块xml.etree.ElementTree自动修改xml命名空间键
    查看>>