android 换肤之style,android换肤总结
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换肤总结相关推荐
- Android中多个style,Android设计规范 Material Design-Style(4图像)
图像 在material design中,图像(无论是绘画还是摄影)都应该是组建而成而并非人为策划的,看起来神奇并且不显得过度制作.这种风格乐观,愉悦,并且坦率.这种风格比较强调场景的实质性(Mate ...
- 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 ...
- Android消息向下堆积,android - 从CoordinatorLayout中的按钮单击事件触发NestedScroll折叠动作 - 堆栈内存溢出...
我有一个CoordinatorLayout,它包含一个ViewPager,该控件使用嵌套的滚动行为可以正常滚动. 但是,我想在单击按钮时触发滚动/折叠行为. 如何通过单击按钮来控制这种崩溃行为. 通过 ...
- Android仿新浪微博弹出界面动画,Android仿新浪微博启动界面或登陆界面(1)
本文为大家分享了Android模仿新浪微博启动界面&登陆界面的具体实现代码,供大家参考,具体内容如下 启动界面 主要有两个功能: 1.加载启动动画 2.判断网络,有者直接进入登陆界面,否则去设 ...
- android换肤哪个简单,Android换肤
这是一个Android换肤的库,代码量极少,支持换肤的情况还比较多,提供了以下功能: 无需重启,一键换肤效率高 支持App内多套皮肤换肤 支持插件式动态换肤 支持Activity,Fragment,以 ...
- android编程任务进度条,Android 进度条 ProgressBar - Android 入门教程
今天要学的是一个特定场合要用到的控件--进度条控件.进度条的作用不言而喻,而在实际使用中,通常会有两种类型的进度条:横向进度条和圆形进度条.当然,ProgressBar 也是支持这两种类型的,可以应对 ...
- android ratingbar 点击事件,android – Capture RatingBar点击
我似乎有一个问题,抓住我的评级栏点击.评分栏显示正常,并具有默认值.唯一的问题是我无法更改任何值,或者没有启用.我尝试了许多不同的东西(例如,在布局中启用,完全用 java构建).他们似乎都没有影响. ...
- android ratingbar不可点击,Android评分控件RatingBar使用实例解析
无论游戏,应用,网站,都少不了评分控件.在Android SDK 中提供了 RatingBar控件来实现相应的工作. 标签有几个常用评分相关属性 android:numStars,指定评分五角星数. ...
- android qq功能实现原理,Android QQ、微信聊天消息界面设计原理与实现
Android QQ.微信聊天消息界面设计原理与实现 原理:Android平台上,典型的以腾讯的QQ.微信这些聊天消息界面通常可以采用ListView设计与实现,需要使用ListView 适配器 ...
最新文章
- python爬虫requests-Python爬虫---requests库快速上手
- IoC--structuremap
- 【年度盘点】10个热门Python练习项目
- 选择开发语言和学习的路径(这个标题可能有点不准确)
- acrobat 控件可以发布吗_短视频可以同时在多个平台发布吗?
- Scrapy框架学习(1)
- QT5开发及实例学习之十一Qt5文件操作功能
- 朋友圈发送照片泄露位置?微信:P 完再发!
- GridView 合并列、行类
- c语言的数组长度问题
- PHP网络版CRM客户管理系统
- Android平板查看网卡mac,如何看电脑网卡和手机mac地址
- javaweb学习路线
- 计算机专业的学生可以考哪些证书
- SAP MM 采购信息记录中价格单位转换因子的修改
- 【0】依照Django官网:实现第一个django app 安装必要的工具/模块
- create方法 eslint关闭_react create-react-app使用less 及关闭eslint
- 单链表的基本操作----------头插法/尾插法建立链表
- IP RAN基站回传中的三大组网方案
- Nginx返回411错误
热门文章
- 无法打开文件“python310_d.lib”
- SDL 库安装、环境配置与使用
- bootstraptable 列隐藏_bootstrapTable 隐藏某一列
- SpringBoot开发案例之整合Dubbo分布式服务
- Keepalived + LVS-DR搭建高可用Web服务器集群
- Redis Sentinel--运维管理
- iframe 父页面与子页面之间的方法的相互调用
- CentOS 6 同一台机器部署多个Tomcat应用服务器
- android studio github 项目导入问题
- 程序集注册工具 (Regasm.exe)