Android-StateListDrawable(状态选择器)

本文详细介绍了Android中的StateListDrawable,一种可以根据视图状态改变显示图像的可绘制对象。主要内容包括StateListDrawable的作用、用法、XML语法,以及不同状态的判定,如`state_pressed`、`state_focused`等。通过示例展示了如何实现圆形点击颜色变换和EditText背景及焦点变化的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

StateListDrawable(状态选择器)

作用:StateListDrawable是在XML中定义的一个可绘制(drawable)的对象,它可以根据状态的不同为同一个图形更换不同的图片

用法:对应于XML文件中的selector

语法

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

<selector xmlns:android=“http://schemas.android.com/apk/res/android
android:constantSize=[“true” | “false”]
android:dither=[“true” | “false”]
android:variablePadding=[“true” | “false”] >

<item
    
    android:drawable="@[package:]drawable/drawable_resource"
    
    android:state_pressed=["true" | "false"]
            android:state_focused=["true" | "false"]
            android:state_hovered=["true" | "false"]
            android:state_selected=["true" | "false"]
              android:state_checkable=["true" | "false"]
            android:state_checked=["true" | "false"]
            android:state_enabled=["true" | "false"]
            android:state_activated=["true" | "false"]
            android:state_window_focused=["true" | "false"] />

item里面的Drawable的状态判定

android:state_pressed
按下的状态,(按下但是还没松开)

android:state_focused
当前View获取了焦点

android:state_selected
用户选择了当前View

android:state_checked
用户选中了View,一般用于CheckBox这种非黑即白的选项

android:state_enabled
当前View处于可用的状态

android:state_hovered
光标是否悬停,通常与focused state相同,它是4.0的新特性

android:state_checkable
组件是否能被check。如:RadioButton是可以被check的。

android:state_activated
是否被激活

android:state_window_focused
应用程序是否在前台,当有通知栏被拉下来或者一个对话框弹出的时候应用程序就不在前台了

特点
1、item可以用多个,item里面放的是Drawable
2、系统查找顺序是顺着item从上到下直到找到就停止往下寻找。

圆形的点击变换颜色

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

<selector

xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_pressed="true" >
    
    <shape android:shape="oval">
        
        <solid
            
            android:color="#ff0000" />
                    <stroke
            
            android:width="4dp"
                            android:color="#294736" />
            </shape>

 </item>

 <item >
    
    <shape android:shape="oval">
        
        <solid
            
            android:color="#848374" />
                    <stroke
            
            android:width="4dp"
                            android:color="#745863" />
            </shape>

 </item>

Edittext的背景框和焦点变化

<?xml version="1.0" encoding="utf-8"?>
<item android:state_window_focused="false">
           <shape android:shape="rectangle">
                   <solid
                           android:color="#FFFFFFFF"/>
                   <corners
            
           android:radius="3dp"/>
        
       <padding
            
           android:left="10dp"
                           android:right="10dp"/>
        
       <stroke
            
           android:width="1dp"
                           android:color="#BDC7D8"/>
    
     </shape>

  </item>



  <item android:state_focused="true" >
    
     <shape android:shape="rectangle" >
                     <solid
                             android:color="#FFFFFFFF"/>
                     <corners
                             android:radius="3dp"/>
                     <padding
            
             android:left="10dp"
                             android:right="10dp"/>
                     <stroke
            
             android:width="1dp"
                             android:color="#728ea3"/>
              </shape>

  </item>

Edittext输入框

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

<selector

xmlns:android=“http://schemas.android.com/apk/res/android”>

<item android:state_pressed="true" >
    
    <shape android:shape="rectangle">
                    <corners android:radius="10dp" />
                    <solid android:color="@color/deep_orange" />
        </shape>

</item>

<item >
    
    <shape android:shape="rectangle">
                    <corners android:radius="10dp" />
                    <solid android:color="@color/orange" />
            </shape>

</item>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值