1.通过设置不同的style ##

这种方式是通过设置theme 然后activity reCreate重新调用activity 设置主题必须在oncreate()方法 并且在setContentveiw()方法之前 才有效

这篇文章就是利用这种方式切换主题

缺点是:需要重启activity

最终方案按照这个实现的android-skin-load 动态加载skin包

//https://github.com/burgessjp/ThemeSkinning/  在android-skin-load的基础上封装的

2.Android-Skin-Loader

http://mp.weixin.qq.com/s/MSLsoMGHyxiZ0q7fxR3zvg

加载皮肤包

其内部通过反射调用AssetManager.addAssetPath()把外部的皮肤资源加载到AssetManager中,并通过该AssetManager创建相应的Resource。当执行换肤操作的时候,就可以设置需要换肤View的相关属性为Resource中相应的资源

代码中的细节

1.每个skinAttr记录的是某个需要换肤的view的 id background 以及对应的 color / colortitlebar_bg skinAttr -----某个换肤view 的单个属性的一系列字段

2.然后将每个skinAttr 添加到 ListviewAttrs-----添加某个view换肤时所要更改的属性(可以是多个属性)

3.SkinItem (View view; Listattrs; ) 用于封装单个view和其需要换肤的对应的属性集合

4.ListmSkinItems 将所有skinitem进行存储 换肤时遍历刷新

关键的两个判断

boolean isSkinEnable = attrs.getAttributeBooleanValue(SkinConfig.NAMESPACE, SkinConfig .ATTRSKINENABLE, false); 先做 skin:enable="true" view里是否有这个属性的判断

if (!AttrFactory.isSupportedAttr(attrName)) 这个判断是看自己是否支持这个属性 里面一般不全 需要自己添加

更换皮肤

主要根据ListmSkinItems 遍历刷新 每个skinitem 用自己的id从skinmanager获取资源中的color background

skinmanager //里面的资源的获取需要自己实现

public int getColor(int resId)

getDrawable(int resId)

源码分析 setcontentview(R.layout.xx)的过程

android 换肤之style,android换肤总结相关推荐

  1. Android中多个style,Android设计规范 Material Design-Style(4图像)

    图像 在material design中,图像(无论是绘画还是摄影)都应该是组建而成而并非人为策划的,看起来神奇并且不显得过度制作.这种风格乐观,愉悦,并且坦率.这种风格比较强调场景的实质性(Mate ...

  2. style=@android:style/buttonbar,Setting style=?android:attr/buttonBarStyle to parent layout and s...

    I followed Android recommendation and set style="?android:attr/buttonBarStyle" to parent l ...

  3. Android消息向下堆积,android - 从CoordinatorLayout中的按钮单击事件触发NestedScroll折叠动作 - 堆栈内存溢出...

    我有一个CoordinatorLayout,它包含一个ViewPager,该控件使用嵌套的滚动行为可以正常滚动. 但是,我想在单击按钮时触发滚动/折叠行为. 如何通过单击按钮来控制这种崩溃行为. 通过 ...

  4. Android仿新浪微博弹出界面动画,Android仿新浪微博启动界面或登陆界面(1)

    本文为大家分享了Android模仿新浪微博启动界面&登陆界面的具体实现代码,供大家参考,具体内容如下 启动界面 主要有两个功能: 1.加载启动动画 2.判断网络,有者直接进入登陆界面,否则去设 ...

  5. android换肤哪个简单,Android换肤

    这是一个Android换肤的库,代码量极少,支持换肤的情况还比较多,提供了以下功能: 无需重启,一键换肤效率高 支持App内多套皮肤换肤 支持插件式动态换肤 支持Activity,Fragment,以 ...

  6. android编程任务进度条,Android 进度条 ProgressBar - Android 入门教程

    今天要学的是一个特定场合要用到的控件--进度条控件.进度条的作用不言而喻,而在实际使用中,通常会有两种类型的进度条:横向进度条和圆形进度条.当然,ProgressBar 也是支持这两种类型的,可以应对 ...

  7. android ratingbar 点击事件,android – Capture RatingBar点击

    我似乎有一个问题,抓住我的评级栏点击.评分栏显示正常,并具有默认值.唯一的问题是我无法更改任何值,或者没有启用.我尝试了许多不同的东西(例如,在布局中启用,完全用 java构建).他们似乎都没有影响. ...

  8. android ratingbar不可点击,Android评分控件RatingBar使用实例解析

    无论游戏,应用,网站,都少不了评分控件.在Android SDK 中提供了 RatingBar控件来实现相应的工作. 标签有几个常用评分相关属性 android:numStars,指定评分五角星数. ...

  9. android qq功能实现原理,Android QQ、微信聊天消息界面设计原理与实现

     Android QQ.微信聊天消息界面设计原理与实现 原理:Android平台上,典型的以腾讯的QQ.微信这些聊天消息界面通常可以采用ListView设计与实现,需要使用ListView 适配器 ...

最新文章

  1. python爬虫requests-Python爬虫---requests库快速上手
  2. IoC--structuremap
  3. 【年度盘点】10个热门Python练习项目
  4. 选择开发语言和学习的路径(这个标题可能有点不准确)
  5. acrobat 控件可以发布吗_短视频可以同时在多个平台发布吗?
  6. Scrapy框架学习(1)
  7. QT5开发及实例学习之十一Qt5文件操作功能
  8. 朋友圈发送照片泄露位置?微信:P 完再发!
  9. GridView 合并列、行类
  10. c语言的数组长度问题
  11. PHP网络版CRM客户管理系统
  12. Android平板查看网卡mac,如何看电脑网卡和手机mac地址
  13. javaweb学习路线
  14. 计算机专业的学生可以考哪些证书
  15. SAP MM 采购信息记录中价格单位转换因子的修改
  16. 【0】依照Django官网:实现第一个django app 安装必要的工具/模块
  17. create方法 eslint关闭_react create-react-app使用less 及关闭eslint
  18. 单链表的基本操作----------头插法/尾插法建立链表
  19. IP RAN基站回传中的三大组网方案
  20. Nginx返回411错误

热门文章

  1. 无法打开文件“python310_d.lib”
  2. SDL 库安装、环境配置与使用
  3. bootstraptable 列隐藏_bootstrapTable 隐藏某一列
  4. SpringBoot开发案例之整合Dubbo分布式服务
  5. Keepalived + LVS-DR搭建高可用Web服务器集群
  6. Redis Sentinel--运维管理
  7. iframe 父页面与子页面之间的方法的相互调用
  8. CentOS 6 同一台机器部署多个Tomcat应用服务器
  9. android studio github 项目导入问题
  10. 程序集注册工具 (Regasm.exe)