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

 

更多相关文章

  1. rockchip rk3368(px5)车载开发之路-bug解决篇1.快速倒车和正常系
  2. 【移动安全实战篇】————5、Android屏幕解锁图案破解
  3. Android的icon设计指南
  4. 关于android分辨率兼容(屏幕适配)问题
  5. 【Android车载系统 News | Tech 3】News 从手机征战到汽车 Andro
  6. Android多点触控技术实战,自由地对图片进行缩放和移动
  7. Android(安卓)长按电源键关机整个流程小学习
  8. Android手势源码浅析-----手势绘制(GestureOverlayView)
  9. 和菜鸟一起学android4.0.3源码之lcd屏幕背光调节

随机推荐

  1. ProtoBuf 在Android的使用与原理解析
  2. Android开发_精准排布控件位置
  3. [转]让IOS像Android一样LinearLayout线性
  4. Android样式之shape标签
  5. Nexus 5 Android(安卓)L 使用感受,以及如
  6. 自己实现MediaExtractor(一)
  7. android消息机制总结
  8. Adfree Android:移动广告杀手
  9. 在iOS和Android中使用二维码ZXing库及常
  10. Android(安卓)-- Looper.prepare()和Loop