目的:

为了加强用户体验,提高品牌效果,赋予我们的产品独特的风格,主题的个性化将成为必然趋势。

但是Android原生系统不支持主题定制,所以需要如何定制主题,如何做得更好,集思广益。……。

政策:

介绍了两种自定义主题的机制。

1.根据Android Configuration Qualifier机制添加我们自己的JRDTheme自定义。

2.以主题包的形式,根据用户是否选择不同的主题,加载不同主题包的资源。

基本原则:

首先介绍方法1:

Android Configuration Qualifier

Android系统为项目提供了多种可供选择的资源,通过命名特殊资源文件夹来区分这些资源。系统运行时,根据设备的当前配置,为每个应用程序加载相应的资源。

这些不同的资源放置在每个应用程序的res/目录下,特殊的命名方法是resources _ name-config _ qualifier 3360

与默认资源文件夹相匹配的resources_name:资源文件夹的名称

根据Config_qualifier:设备的配置,要使用的资源文件夹名称

Android系统根据优先级支持多种配置鉴定表,如图1所示。

如何添加Jrd Theme Resources

JrdTheme的核心战略是在我们设定其他主题时自动取代我们想要改变的资源(FrameworkApp)。具体步骤如下:

1.工程师从UE哪里得到我们想改变的主题资源?

2.将这些资源放置在相应模块的res/目录中。例如,要自定义drawable、color和layout,请以Contacts模块为例。

原始Contacts模块的默认资源目录为:

Res/

Layout/

Main.xml

Drawable/

Icon.png

Values/

Colors.xml

用户定义的资源目录如下:

Res/

Layout/

Main.xml

Layout-jrdthemexxx/

Main.xml

Drawable/

Icon.png

Drawable-jrdthemexxx/

Icon.png

Values/

Colors.xml

Values-jrdthemexxx/

Colors.xml

note : JRDTHEMEXX是一个主题的Qualifier。如果有多个主题,则存在多个JRDTHEMEXX。

3.和原来一样编译这些模块,把推送放到手机里就可以了。

这只是指南,具体实施要细分……。目前在Diablo,beetle以这种方式实施……。我在smartiii上试过,但是机制还可以,但是变化范围太广了,所以比较棘手。

方法2:

核心思想:系统有多个主题资源包,应用程序可以使用相同的资源ID访问不同资源包中的相应资源。Android基本系统的资源访问过程有三种:

样式:

第一种常用方法是使用XML定义,并通过AAPT工具生成R文件。该文件包含R文件,其中列出了资源索引,以便Android系统可以通过整个资源树进行访问。

其次,通过Resources接口访问,并使用Resources类的getDrawable、getString等接口获取资源。

第三,通过AssetManager类的接口访问,使用该类的open方法返回InputStream对象以获取资源。

事实上,这三种方法只是Android资源访问整个过程中不同级别外部提供的三个接口,到底层的实现都是以相同的方式完成的。

因此,实际上需要修改的一些骨干是在访问资源的特定路径之前,根据当前系统主题设置访问不同资源APK下的文件。

就是将原生Android的资源ID和资源文件路径之间的一对一关系更改为一对多关系。

例如:如果原始资源ID和资源文件路径关系如下:

R.drawable.image01=0x7F020001

通过系统上的资源找到后,文件路径为/system/a中的res/drawable_hdpi

AssetManager native读取并上传资源。

然后,从接收路径读取资源时,必须将文件路径替换为/data/a下的res/drawable_hdpi

相关推荐