本文共 2454 字,大约阅读时间需要 8 分钟。
状态选择器(StateListDrawable)是Android系统中一个强大的工具,用于为UI组件根据不同的状态定义不同的视觉效果。通过状态选择器,可以为View在不同状态下设置不同的背景图像或颜色,从而提升用户体验。
Android定义了多种状态,可以让View根据状态切换不同的外观。以下是常见的状态定义:
public class StateListDrawable extends DrawableContainer { // DrawableContainer是Drawable的子类,用于管理多个Drawable对象}public class DrawableContainer extends Drawable implements Callback { // Callback接口用于定义Drawable的回调方法} addState方法:用于为特定的状态集合设置Drawable图片资源。
stalistDrawable.addState(new int[]{pressed, window_focused}, getResources().getDrawable(R.drawable.guide_1));drawableStateChanged方法:根据当前View的状态属性值更新Drawable对象。
getState方法:获取当前View的状态属性值并返回状态集合。
setState方法:根据提供的状态集合更新Drawable对象,并触发状态变化回调。
状态切换主要通过以下步骤实现:
除了使用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); // 去掉默认背景 tv.setTextColor(Color.parseColor("#FFFFFF")); // 通过argb值设置tv.setTextColor(Color.rgb(255, 255, 255)); // 通过颜色分量设置tv.setTextColor(getResources().getColor(R.color.my_color)); // 通过资源引用设置 Resources resource = getBaseContext().getResources();ColorStateList csl = (ColorStateList) resource.getColorStateList(R.color.my_color);if (csl != null) { tv.setTextColor(csl);} #FFFFFF
通过上述方法,开发者可以根据需求灵活设置TextView的颜色。
转载地址:http://yyss.baihongyu.com/