Android(安卓)副屏density设置,解决副屏view拉伸现象
首先先转发一篇文章,讲解Android 多屏显示流程的,不熟悉的流程的可以看一下这篇文章Android显示设备管理以及转屏流程
不过这里需要讲的不是流程,而是记录在副屏开发时,遇到的一些技术问题。
在开发副屏应用的时候,遇到一个问题,开发的app在主屏上显示是正常的,但是在副屏上显示,图片和字体有非常明显的拉伸,但是设置的宽高都是wrap_content,这个现象就非常奇怪。
发现主副屏唯一的区别就是density值不同,相同的屏幕但是表现却不一致,屏幕互换现象也存在,那么就需要设置副屏的density跟主屏一致,发现问题解决了。
1.Android 支持多屏显示,在修改主屏的density值时,可以在init.rc中通过修改ro.sf.lcd_density 的值来实现
# Set the density to 160 tvdpi to match CDD.
setprop ro.sf.lcd_density 160
2.副屏的density值没有引用主屏的值,而是通过计算出来的(可以通过dumpsys display来看)。
以Android 8.1为例,在DisplayDeviceInfo.java(/frameworks/base/services/core/java/com/android/server/display/目录下)
public void setAssumedDensityForExternalDisplay(int width, int height) { densityDpi = Math.min(width, height) * DisplayMetrics.DENSITY_XHIGH / 1080; // Technically, these values should be smaller than the apparent density // but we don't know the physical size of the display. xDpi = densityDpi; yDpi = densityDpi; }
这个方法中会通过副屏的宽高值来计算出副屏的density,以1920*720的屏幕来计算, density=720*320/1080 =213.
其中DisplayMetrics.DENSITY_XHIGH是定值320,density是int类型,最后取整就是213,这就是副屏的density。
在这里修改副屏density的值,改成需要的值即可。副屏执行到这里可以看转发的那边流程文档,上面介绍的很详细,这里不再赘述。
更多相关文章
- rockchip rk3368(px5)车载开发之路-bug解决篇1.快速倒车和正常系
- 【移动安全实战篇】————5、Android屏幕解锁图案破解
- Android的icon设计指南
- 关于android分辨率兼容(屏幕适配)问题
- 【Android车载系统 News | Tech 3】News 从手机征战到汽车 Andro
- Android多点触控技术实战,自由地对图片进行缩放和移动
- Android(安卓)长按电源键关机整个流程小学习
- Android手势源码浅析-----手势绘制(GestureOverlayView)
- 和菜鸟一起学android4.0.3源码之lcd屏幕背光调节