1.资源匹配的优先级
- values-mcc310(sim卡运营商)-en-sw320dp-w720dp-h720dp-large-long-port-car-night-ldpi
2.背景
- 目前已知的车机联网都是通过 T-Box, Android 系统中的 mcc config 字段都是空 适配 UI 时可以偷用此字段:如
19201080 屏幕开机时把 config.mcc 设置成 100 ,UI适配时把此型号的所有资源都放到 values-mcc100
文件夹中,应用启动后自动加载 values-mcc100 资源。 以后开发的型号可以做一个映射表,一个 mcc 对应一个型号,如:
mcc100 -> A01 19201080
mcc101 -> A01 1920720
mcc102 -> C03 19201080 ……
3.系统中如何设置此字段:
- Configuration config = new Configuration(); config.mcc = 100;
ActivityManager.getService().updateConfiguration(config);
此段代码加在启动较早的服务或者应用中即可,以后所有启动的 App 会优先加载 values-mcc*** 的资源。
values-mcc100的数字定义范围:100~999
4.另外:
- 1.动态更改 mcc 时,存活的 Activity 并不会收到 config change 事件,静态换肤可以考虑用 mcc 方案,动态换肤需要改造 FW。
2.以上举例都是以 values 举例,实际上 layout、drawable、color、anim……都适用以上原则
3.对于指定分辨率的属性(例如: A01 1920*1080 需要使用 values-1792x1080),指定分辨率属性并没出现在官网的匹配属性集里,并且它的优先级最低,不建议使用此种方式。
5.具体举例:
A01 分乘用版和越野版,并且需要支持白天黑夜模式(Google 原生的白天黑夜模式)。
乘用版和越野版的白天模式使用的是同一套主题资源。
乘用版黑夜模式使用的是绿色主题,越野版黑夜模式使用的是橙色主题。
为了让大家快速适配主题:
乘用版、越野版的白天模式主题资源放到默认的或者 A01 flavor下默认的文件夹即可。如 values, drawable……
乘用版绿色主题:
创建对应的 *****-mcc100-night 文件夹下:如 values-mcc100-night, drawable- mcc100-night ……
越野版橙色模式:
创建对应的 ***-mcc110-night 文件夹下:如 values-mcc110-night, drawable-mcc110-night ……
验证:
1.安装:***-debug.apk
2.启动 设置主题应用:adb shell am start -n XXXXXXX
3.手动设置到需要验证的主题:白天、绿、橙
4.启动自己的应用
5.验证效果
注意事项:
1.每次切换主题 AMS 会重启已经启动的 Activity,如果不想让系统重启 Activity,可以在 manifest 中对应的 Activity 上加上:
android:configChanges=“uiMode”, 并且需要在 Activity 中复写 onConfigurationChanged, 在其中实现换肤。
2.如果应用在 Service 中使用 WindowManager addView 方式创建的视图,则 Service 需要加入 android:configChanges=“uiMode” , 并且复写 onCo