|
Android Application Theme的实现
一, 原理
1, theme 的形式
1-1 内置theme (一组特定前缀后缀的图片)
1-2 外置theme (只包含规范命名图片的apk)
2, 实现
根据特定theme获取指定图片资源,并设置在view上。
步骤:
2-1 获得指定包名的Context
2-2 通过Context 获得指定theme 的图片资源
代码如下: public Context getThemeContext() {
if (mType == ThemeManager.THEME_TYPE_NATIVE)
return mDefContext ;
if (mContext != null)
return mContext ;
if (TextUtils.isEmpty( mPkg)
|| mDefContext.getPackageName().equals(mPkg ))
mContext = mDefContext;
try {
mContext = mDefContext.createPackageContext(mPkg ,
Context. CONTEXT_INCLUDE_CODE
| Context.CONTEXT_IGNORE_SECURITY );
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return mContext ;
} |
2-3 其他事件
Theme的安装和卸载会影响theme列表,需要处理。
Theme的切换需要update()
二, 关注点
1, 本质
Theme架构完成之后,剩余的工作就是图片资源的管理。
1-1 规范的命名
通过名字直接定位到具体页面的具体图标,这是目标。所以命名上的冗长是必须的。设计师和工 程师之间,会节约大量的沟通成本。
参看之前blog: http://mikewang.blog.51cto.com/3826268/1020693
1-2 流程
大约完成几个theme之后,设计师和工程师会有基本的感觉,有一些重复的工作。相关人员,参与相应的讨论,优化流程。
设计师:
设计方案的分类,基本类型涵盖三类
使用ps模板,省却命名的时间(经验证明)
工程师:
功能的细分,也有相应的模板。比如menu的实现有两种方式,则准备
对UI的敏感,能迅速发现ui的错误,这需要时间培养。之前有总结,参看博文:
http://mikewang.blog.51cto.com/3826268/1003333
其他:鱼与熊掌的问题:图片资源的复用/额外的筛选工作量
复用包括两方面:
一,复用主程序资源,比如背景
二,theme内部资源的复用,比如back键
一旦涉及复用,其实每一套theme的图片的总数是不定的,需要筛选,
很麻烦,工作量不少。我现在倾向于设计师给出全版本的图。这样工程师
的工作只需要调图即可。如果按照这个工作流程,出去设计一个theme
半天就可以完成发布。
2, 架构的兼容性
2-1 以设计为先导,用测试保证兼容性
Theme的前提就是follow设计师的设计,所以代码上必须保持灵活性或者兼容性
以保证不同的设计能在一个架构下实现。所以至少在三类设计下测试,保证兼容性。
因为一旦发布出去,此主程序和此theme便产生一一对应的关联,未来主程序对一
Theme的兼容性修改,都有可能导致其他theme不兼容。
2-2 主程序的升级和theme 的升级
当主程序不断增加新功能,对应的增加新UI元素。而已发布的theme需要增加一
些图片。通过定升级的协议,保证升级的提醒。
本文主要从技术点和项目管理方面谈了谈Theme,希望有所帮助。
附件给出theme workflow,需要修改文件名,删除后面的rar即可。
附件:http://down.51cto.com/data/2362917
----------------------------
原文链接:https://blog.51cto.com/mikewang/1208035
程序猿的技术大观园:www.javathinker.net
[这个贴子最后由 flybird 在 2020-04-08 09:08:21 重新编辑]
|
|