最近项目中有很多需求需要修改背景色,简单来说就是通过点击listview条目,把选中的item改变颜色。而色值则通过color.xml文件获取。大概需求如下,布局分两部分,第一部分是横向的LinearLayout,第二部分是一个listview,当点击条目的时候,需要让头部和item一起变颜色。

如下图需求:

       做法如下:color.xml文件

<resources><color name = "yellow">#ffff00<color><color name = "white">#ffffff<color>
</resources>

具体的点击条目怎么实现变色的逻辑在这里就不写了,主要讲一下写代码的时候遇到的问题。

因为条目是固定的,只有7个,所以在getview()这个方法中,判断点击的条目位置和getview(View arg1 , int position)方法中position的位置进行对比,点击条目的位置是通过方法传进来的,如下判断:

if(item_position == 0 && position == 0){//说明是第一个条目,改变第一个条目颜色,其他不变arg1.setBackgroundResource(R.color.yellow);frist_root.setBackgroundResource(R.color.yellow);second_root.setBackgroundResource(R.color.white);//下面是第三个、第四个等等......
} else if(item_position == 1 && position == 1){arg1.setBackgroundResource(R.color.yellow);frist_root.setBackgroundResource(R.color.white);second_root.setBackgroundResource(R.color.yellow);........
} ......

好了,run一把。大功已成,等等。。。。。。。。。

第一次点击,效果nice,我从第一个条目点到第二个条目,在切到第三个条目,一切都OK,我很happy,然后我回切到第一个条目,效果如图:

       大写的懵逼ing。。。。。。

我再切回来,头部布局没有跟着变颜色。我开始的设想是,没有走getview方法中的frist_root.setBackgroundResource(R.color.yellow)代码。然而我debug以后…….发现这行代码是走了的,但是为毛没变颜色呢???

然后就去问我们老大,一个集智慧与经验并存的猿!他懵逼了不到5分钟,说来来来,这样搞一搞。于是就有了如下这段代码:

if(item_position == 0 && position == 0){//说明是第一个条目,改变第一个条目颜色,其他不变arg1.setBackgroundResource(R.color.yellow);frist_root.setBackgroundColor(context.getResource().getColor(R.color.yellow));second_root.setBackgroundColor(context.getResourcr().getColor(R.color.white));//下面是第三个、第四个等等......
} else if(item_position == 1 && position == 1){arg1.setBackgroundResource(R.color.yellow);frist_root.setBackgroundColor(context.getResource().getColor(R.color.white));second_root.setBackgroundColor(context.getResource().getColor(R.color.yellow);........
} ......

然后就没有然后了,效果就这么实现了。。。。。我搞了半天被别人不到5分钟搞定了,憋到内伤。。。。

总结一下:setBackgroundResource(R.color.XXX)改变的颜色是最下层的颜色,当改变完颜色以后,因为我头部布局在xml文件中默认颜色是white,所以又给white遮盖掉了。

xml 文件中布局默认的颜色呢,可以理解为显示在中层。当我用Resource这个方法,把颜色改变过来以后,它因为在最下层,所以直接被中层的给刷掉了,因此颜色又变了回去。

而setBackgroundColor(context.getResouce().getColor(R.color.XXX))呢,可以理解为改变的是最上层的颜色,不管我xml布局中的颜色是什么色,我在你布局颜色上层又给刷了回去。所以就显色了。

当然,这只是鄙人想当然,要想深入理解原理,还是要看源码的,我只是为了方便记忆自己理解一下。但不管怎么理解,最主要是功能实现了。而且以后,在遇到改变背景色,可以先考虑使用最后一个方法。

有不当之处,末学虚心接受,还望各位前辈多多批评。。。。。。

简述setBackgroundResource、setBackgroundColor、setBackgroundDrawable的区别相关推荐

  1. setBackground(),setBackgroundResource(),setBackgroundColor(),setBackgroundDrawable()的区别和用法

    setBackground(),setBackgroundResource(),setBackgroundColor()和setBackgroundDrawable()这几个方法都可以对控件的颜色进行 ...

  2. 微型直流减速电机简述:无刷电机与有刷电机区别分析

    参考文献 [1] 刘爱民, 倪元相. 电机与拖动技术[M]. 第二版. 大连:大连理工大学出版社, 2017. [2] 王爱元. 控制电机及其应用[M]. 第一版. 上海:上海交通大学出版社, 201 ...

  3. 简述 Hibernate 和 JDBC 的区别、优缺点

    1.hibernate是一个开源的.采用面向对象的思想实现ORM映射框架,它对jdbc进行了一层封装,对于数据库的连接.关闭.数据的持久化(增删改查).事务的管理都进行了封装,使得程序开发的时候可以用 ...

  4. Java习题3(1.封装的意义有哪些?2.final关键字的作用有哪些?3. 简述覆盖与重载的区别。4. 写一个冒泡排序算法。)

    1.封装的意义有哪些? 答: 将对象成员保护起来,使用接口对外公开,安全性更高. 读取.修改对象属性更加方便,更具有灵活性. 增加.删除对象属性在对应类中进行操作即可,不影响其他类,可维护性好. 2. ...

  5. 简述setBackgroundResource、setBackgroundColor的区别

    setBackgroundResource(R.color.XXX)改变的颜色是最下层的颜色,当改变完颜色以后,因为我头部布局在xml文件中默认颜色是white,所以又给white遮盖掉了. xml ...

  6. android中setBackgroundResource(int color) 与 setBackgroundColor(int color) 区别

    1.首先在layout的布局文件中设置 <color name="tab_text_color_check">#0783e8</color> android ...

  7. android setBackgroundResource setBackgroundColor setBackgroundResource区别

    总结一下:setBackgroundResource(R.color.XXX)改变的颜色是最下层的颜色,当改变完颜色以后,因为我头部布局在xml文件中默认颜色是white,所以又给white遮盖掉了. ...

  8. Android setBackgroundResource和setBackgroundDrawable和用法

    两个方法的效果是一样,只是区别于效率! playBtn.setBackgroundResource(R.drawable.pause_selecor); 从上面可以看出来是从资源文件中获取drawab ...

  9. setBackgroundResource和setImageResource的区别

    setBackgroundResource是设置view的背景图片 setImageResource是设置ImageView的图片 对于一个imagevewButton来说,你既可以setBackgr ...

最新文章

  1. 最新!2022中国大学排名发布!
  2. resultMap和resultType的区别
  3. 网路游侠:用防篡改和WAF保护网站安全
  4. Leetcode 76最小覆盖子串77组合78子集
  5. 每日两SQL(5),欢迎交流~
  6. 使用mysql事件_MySQL事件的使用详解
  7. Java线程安全以及线程安全的实现方式和内存模型(JMM)
  8. 前端学习(2201):mutation提交风格
  9. 有关vi(vim)的常用命令
  10. 6.5 XGBoost实战
  11. module 'scipy.misc' has no attribute 'imread' 报错解决
  12. hive join 数据倾斜 真实案例
  13. 研磨设计模式-设计模式的基础-设计模式是什么
  14. 论文阅读笔记:ShuffleNet
  15. Xshell7绿色版使用公钥对免密连接虚拟机(centos7.9-保姆级)
  16. Microsemi Libero免费版License申请教程(2022年)
  17. Markdown 更改字体颜色
  18. 时代新宠儿——HEIF图像格式:节省50%空间
  19. 操作系统笔记(二):进程和线程
  20. 【语音合成】基于matlab线性预测共振峰检测和基音参数语音合成【含Matlab源码 562期】

热门文章

  1. 表单onsubmit事件无效以及表单onsubmit使用ajax无效解决
  2. photoshop 切片 html 图片路径,PS网页设计中切片使用教程
  3. 什么是自然语言处理?
  4. SBEC016智能电池管理方案
  5. 2022-2027年(新版)中国智能控制器行业运行状况及投资前景预测报告
  6. 汉字输入计算机代码,音代码计算机汉字输入法
  7. Shiro 中的 Realm
  8. 传巨人网络58万元收购生活域名shenghuo.com
  9. 线性表--链栈(十一)
  10. css选择器(多选择器、属性选择器、伪类选择器)