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

 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值