Android 副屏density设置,解决副屏view拉伸现象

  • Post author:
  • Post category:其他


首先先转发一篇文章,讲解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的值,改成需要的值即可。副屏执行到这里可以看转发的那边流程文档,上面介绍的很详细,这里不再赘述。



版权声明:本文为dzy_mails原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。