浅谈android的selector背景选择器(ListView/GridView)

本文详细介绍了如何在Android中使用selector来改变ListView和Button的背景和文字颜色。通过不同的状态如按下、聚焦和选中等,可以实现丰富的视觉效果。
关于listview和button都要改变android原来控件的背景,在网上查找了一些资料不是很全,所以现在总结一下android的selector的用法。


首先android的selector是在drawable/xxx.xml中配置的。


先看一下listview中的状态:


把下面的XML文件保存成你自己命名的.xml文件(比如list_item_bg.xml),在系统使用时根据ListView中的列表项的状态来使用相应的背景图片。


drawable/list_item_bg.xml


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

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

        <!-- 默认时的背景图片-->

        <item android:drawable="@drawable/pic1" />

        <!-- 没有焦点时的背景图片-->

        <item android:state_window_focused="false" android:drawable="@drawable/pic1" />

        <!-- 非触摸模式下获得焦点并单击时的背景图片-->

        <item android:state_focused="true" android:state_pressed="true"

            android:drawable="@drawable/pic2" />

        <!-- 触摸模式下单击时的背景图片-->

        <item android:state_focused="false" android:state_pressed="true"

            android:drawable="@drawable/pic3" />

        <!--选中时的图片背景-->

        <item android:state_selected="true" android:drawable="@drawable/pic4" />

        <!--获得焦点时的图片背景-->

        <item android:state_focused="true" android:drawable="@drawable/pic5" />

    </selector>

  使用些xml文件:第一种是在listview中配置android:listSelector="@drawable/list_item_bg"

或者在listview的item中添加属性android:background=“@drawable/list_item_bg"即可实现,或者在java代码中使用:Drawable drawable = getResources().getDrawable(R.drawable.list_item_bg); 

       ListView.setSelector(drawable);同样的效果。

但是这样会出现列表有时候为黑的情况,需要加上:android:cacheColorHint="@android:color/transparent"

使其透明。

其次再来看看Button的一些背景效果:
    android:state_selected是选中

    android:state_focused是获得焦点

    android:state_pressed是点击

    android:state_enabled是设置是否响应事件,指所有事件
根据这些状态同样可以设置button的selector效果。也可以设置selector改变button中的文字状态。

以下就是配置button中的文字效果:

drawable/button_font.xml

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

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

        <item android:state_selected="true" android:color="#FFF" />

        <item android:state_focused="true" android:color="#FFF" />

        <item android:state_pressed="true" android:color="#FFF" />

        <item android:color="#000" />

    </selector>


Button还可以实现更复杂的效果,例如渐变啊等等。

drawable/button_color.xml
 <?xml version="1.0" encoding="utf-8"?>

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

        <item android:state_pressed="true">

            <!-- 定义当button 处于pressed 状态时的形态。-->

            <shape>

                <gradient android:startColor="#8600ff" />

                <stroke android:width="2dp" android:color="#000000" />

                <corners android:radius="5dp" />

                <padding android:left="10dp" android:top="10dp"

                    android:bottom="10dp" android:right="10dp" />

            </shape>

        </item>

        <item android:state_focused="true">

            <!-- 定义当button获得focus时的形态-->

            <shape>

                <gradient android:startColor="#eac100" />

                <stroke android:width="2dp" android:color="#333333" color="#ffffff" />

                <corners android:radius="8dp" />

                <padding android:left="10dp" android:top="10dp"

                    android:bottom="10dp" android:right="10dp" />

            </shape>

        </item>

    </selector>
最后,需要在包含button的xml文件里添加两项。假如是main.xml 文件,我们需要在<Button />里加两项。
         android:focusable="true"

         android:backgroud="@drawable/button_color"
<think>好的,用户想分析MyBatis映射文件的功能,具体提到了namespace、resultMap、selectListVo、selectvo以及SQL语句的作用。首先,我需要回忆MyBatis的基本结构和各个元素的作用。 首先,namespace在Mapper.xml中非常重要,它对应的是DAO接口的全限定名,这样MyBatis才能将接口方法与映射文件中的SQL语句绑定。比如用户提到的com.dao.BaoxiuxinxiDao,这就是命名空间,确保每个Mapper的唯一性。 接下来是resultMap,用户可能遇到了数据库字段和Java属性不一致的情况,比如下划线命名转驼峰。引用3中提到resultMap用于解决查询结果为null的问题,所以需要解释resultMap如何映射字段到实体类。例如,数据库中的a_username对应Java的aUsername,这时候需要用resultMap的column和property属性来映射。 然后是SQL语句部分,用户提到了selectListVo和selectvo,可能是指返回列表和单个对象的查询。需要区分不同的查询方法,比如selectList返回多个结果,而selectOne返回单个。同时,参数传递的方式,比如使用parameterType或者@Param注解,引用1和2中有提到HashMap和参数类型的处理。 用户提供的示例中有com.entity.BaoxiuxinxiEntity,这说明实体类与数据库表对应。需要说明SQL语句中的resultType或resultMap如何指定返回类型,确保结果正确映射到实体类。 可能用户在实际使用中遇到了映射问题,比如字段不匹配导致数据无法正确注入,这时候需要详细说明resultMap的配置方法,包括id和result标签,以及复杂情况下的collection或association处理,如引用2中的示例展示了collection用于一对多关系。 还需要注意SQL语句中的动态SQL,比如if、foreach等标签,但用户的问题中没有提到,可能暂时不需要展开。但需要确保用户了解基本结构,如select、insert等标签的使用。 最后,用户可能需要示例来理解如何将这些元素结合起来,比如一个完整的Mapper.xml文件结构,展示namespace、resultMap和select语句的配置。同时,结合引用中的示例,说明如何避免常见错误,比如字段映射错误或结果集类型不正确。 总结一下,回答需要分点解释每个部分的作用,结合用户提供的实体类和DAO接口名称,给出具体示例,并引用相关的参考资料来增强可信度。同时,生成的问题要围绕MyBatis映射文件的深入使用和常见问题,帮助用户进一步学习。</think>### MyBatis映射文件功能分析 #### 1. **`namespace`的作用** - **核心功能**:`namespace`是映射文件的唯一标识,必须与对应的DAO接口全限定名严格对应。 - 示例:`namespace="com.dao.BaoxiuxinxiDao"`表示该文件映射到`BaoxiuxinxiDao`接口,MyBatis通过此配置将接口方法与SQL语句绑定[^1]。 - **应用场景**:在Java代码中调用`sqlSession.getMapper(BaoxiuxiuxiDao.class)`时,MyBatis会自动匹配同名映射文件中的SQL操作。 --- #### 2. **`resultMap`的功能** - **核心功能**:解决数据库字段名与Java实体类属性名的映射问题,支持复杂结果集映射。 - **字段映射**:将数据库下划线命名(如`user_name`)映射为Java驼峰属性(如`userName`)[^3]。 - **复杂映射**:通过`<collection>`或`<association>`处理一对多、多对一关系(如引用2中的角色列表映射)[^2]。 - **示例**: ```xml <resultMap id="baoxiuxinxiMap" type="com.entity.BaoxiuxinxiEntity"> <id column="id" property="id"/> <result column="repair_content" property="repairContent"/> <!-- 其他字段映射 --> </resultMap> ``` --- #### 3. **SQL语句的作用** - **`<select>`标签**: - **`id`**:对应DAO接口方法名(如`selectListVo`、`selectvo`)。 - **`resultType/resultMap`**:指定返回类型,`resultType`用于简单映射,`resultMap`用于复杂映射。 - **`parameterType`**:定义输入参数类型(如`HashMap`或实体类)。 - **示例**: ```xml <select id="selectListVo" resultMap="baoxiuxinxiMap"> SELECT * FROM baoxiuxinxi WHERE status = #{status} </select> ``` --- #### 4. **`com.entity.BaoxiuxinxiEntity`与映射关系** - **实体类绑定**:`resultMap`的`type`属性指向实体类全限定名,确保查询结果自动转换为Java对象。 - **动态SQL**:可通过`<if>`、`<foreach>`等标签实现条件查询,例如: ```xml <select id="selectByCondition" parameterType="map" resultMap="baoxiuxinxiMap"> SELECT * FROM baoxiuxinxi <where> <if test="status != null">status = #{status}</if> <if test="keyword != null">AND content LIKE #{keyword}</if> </where> </select> ``` --- #### 5. **工作流程总结** 1. **接口与映射绑定**:通过`namespace`关联DAO接口。 2. **结果集映射**:`resultMap`解决字段不匹配问题。 3. **SQL执行**:通过`<select>`等标签定义具体操作,参数通过`#{param}`占位符注入[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值