需求及场景
国内Android系统平台太多了,RK、全志、mtk、展讯,相同平台也会有不同的Android版本,不同版本可能会有不同的屏幕密度。
客户完成一个平台的某个Android版本的软件开发,在集成到系统后形成产品。后续因为成本、方案原因,同一个应用扩展或者转移不同的Android版本、不同的平台。由于之前某个屏幕密度下,程序调试好了,应用端也不愿意按照新的系统来适配。
那么就需要系统来配合应用,默认屏幕密度了。
提示:以下是本篇文章正文内容,下面案例可供参考
一、界面位置及密度
位置
设置->显示->显示大小
测试
使用命令wm density 获取屏幕密度,每次调试默认大小后获取一次。 发现默认大小值时候,只有Physical density 默认的物理屏幕密度,如果修改后显示大小后会出现Override density,修改后的wmdensity
需求:如果需要默认一个非默认的屏幕密度 density
实现方案:那么就设置Override density
一、修改density
修改属性值
ro.sf.lcd_density
属性位置
**RK平台:**找到不同平台,下面的配置文件进行修改
MTK平台:
device\mediateksample\k69v1_64_k419\device.mk
修改属性值:
PRODUCT_PROPERTY_OVERRIDES += ro.sf.lcd_density=240
修改默认值
获取需要修改的值
- 常规的大、小、最大等按照上面测试,获取屏幕密度,然后默认
- 非常规的密度,客户提供,然后默认
修改文件:
vendor/mediatek/proprietary/packages/apps/SettingsProvider/res/values/defaults.xml
vendor/mediatek/proprietary/packages/apps/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
defaults.xml
新增节点: <string name="def_display_density_forced" translatable="false">290</string>
DatabaseHelper.java
添加默认数据到数据库:在 loadSecureSettings 方法中,添加如下配置
loadStringSetting(stmt, Settings.Secure.DISPLAY_DENSITY_FORCED,
R.string.def_display_density_forced);
二、部分资源参考
总结
- 需要知道修改哪个参数
- 屏幕密度相关概念熟悉:wm density; wm density value; Physical density:Override
density - 新增节点:def_display_density_forced
- 默认数据库,流程熟悉:DatabaseHelper.java
延伸
-
首先搞清楚:我们修改显示大小,是在wm density结果下的:Physical density 值的基础上修改的。
我们在Physical density 基础上再去调试 显示大小的。
那我们其实是可以去调试 wm density 默认值,来实现显示大小效果,设置-显示大小 就让它默认 不也能解决问题嘛 -
density 和 最小宽度 可以换算的,那么客户要求最小宽度值,我们反推density 值,设置默认的density 值就可以了。
忽略公式,直接调试:比如 客户要求最小宽度590,那我们怎么设置densitywm density 查看当前默认density, 去系统设置->开发者选项->最小宽度
调试 wm density value, 去系统设置->开发者选项->最小宽度。 调试到规定的sw-width 值对应的 value 值,设置为默认的dentisy 就可以了。 -
根据2 中获取的 density value 值,默认设置ro.sf.lcd_density 值 OK