问题原因:

手上的APP希望显示手机初始字体大小,且不随系统显示和字体大小的变更变化。

使用方案,设置字体为默认,显示大小为初始化配置。方案如下:

Application.java

@Overridepublic void onConfigurationChanged(Configuration newConfig) {if (newConfig.fontScale != 1) { //非默认值getResources();}super.onConfigurationChanged(newConfig);}@Overridepublic Resources getResources() {Resources res = super.getResources();if (res.getConfiguration().fontScale != 1) {//非默认值Configuration newConfig = new Configuration();newConfig.setToDefaults();//设置默认if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {newConfig.densityDpi = DisplayUtil.getDefaultDisplayDensity();if (densityDpi == -1) {densityDpi = DisplayUtil.getDefaultDisplayDensity();}}res.updateConfiguration(newConfig, res.getDisplayMetrics());}return res;}

DisplayUtil.getDefaultDisplayDensity 方法是通过反射调用:

   try {Class clazz = Class.forName("android.view.WindowManagerGlobal");Method method = clazz.getMethod("getWindowManagerService");method.setAccessible(true);Object iwm = method.invoke(clazz);Method getInitialDisplayDensity = iwm.getClass().getMethod("getInitialDisplayDensity", int.class);getInitialDisplayDensity.setAccessible(true);Object densityDpi = getInitialDisplayDensity.invoke(iwm, Display.DEFAULT_DISPLAY);return (int) densityDpi;} catch (Exception e) {ToastUtils.showToast(e.getMessage());e.printStackTrace();return -1;}

问题导致

这个方案在大部分设备上没有问题,在P30上布局等都是变大,显示内容不完全。

通过getDefaultDisplayDensity 得到像素密度为480!!!!!

在通过当前系统密度比值density*160得到的密度却是少于480!!!,所以当前UI显示的图都是

drawable-xxhdpi的图,造成UI错乱。

DisplayMetrics displayMetrics = res.getDisplayMetrics();float initDensity = displayMetrics.density;int initTargetDensityDpi = (int) (initDensity * 160);

计算出来的密度设置成显示密度之后,显示正常!!!

这难不成华为留的坑?管不了,先尝试解决。

解决方案

既然读取出来的初始化屏幕密度有问题,而我自己计算出来的可以。

那么

1.设置屏幕到初始化密度后。

2.读取屏幕密度比值density,计算出正确的密度,再次修改。

正确的密度参考:

/*** .drawable-ldpi (dpi=120, density=0.75)** .drawable-mdpi (dpi=160, density=1)** .drawable-hdpi (dpi=240, density=1.5)** .drawable-xhdpi (dpi=320, density=2)** .drawable-xxhdpi (dpi=480, density=3)** .drawable-xxxhdpi (dpi=640, density=4)*/

屏幕适配遇到P30 的坑相关推荐

  1. 屏幕适配 AndroidAutoSize 完全解析,踩坑测试 与 使用注意事项总结

    1.设备屏幕参数获取.计算.几个设备相关参数 计算示范:某手机 6.39英寸 (对角线),1英寸是160dp,所以是 1022.4dp,分辨率 2340 x 1080,勾股定理得到对角线长为2577. ...

  2. Android 屏幕适配从未如斯简单(8月10日最终更新版)

    前言 一个月前看了今日头条新的屏幕适配方案,这是传送门,对此不禁拍案叫绝,为此我想把这种方案融入到我工具类中直接一行代码即可适配,如今最新 1.19.0 版 AndroidUtilCode 已有其最新 ...

  3. android屏幕适配的目的,Android 不同分辨率下屏幕适配的实战方案与经验总结

    Android 开发中,屏幕适配是一大考点,几乎每一场面试,都不会落下这个问题,这个问题说简单也简单,说难也难,当然对于有过真实的适配经验的人来说,这个根本不算什么问题,从坑里爬过的人,自然知道这其中 ...

  4. 安卓屏幕适配方案(根据今日头条方案,升级版)

    前言 屏幕适配方案有很多,比如原生的dp,鸿洋大神的AutoLayout,宽高限定符,今天我用缺点比较小的今日头条方案 头条适配方案的文章链接:https://mp.weixin.qq.com/s/d ...

  5. 《转》Android 今日头条屏幕适配方案终极版正式发布!

    概述 Android系统发布十多年以来,关于Android的UI的适配一直是开发环节中最重要的问题,但是我看到还是有很多小伙伴对Android适配方案不了解. 刚好,近期准备对糗事百科Android客 ...

  6. Android不同屏幕适配的大神解决方案(转)

    在CSDN社区逛了这么多年,从中也学习了很多,但是一直没有时间自己写博客(其实是因为太菜,滑稽),这也是我第一次转载大神的文章,不是很会弄,所以里面的内容和链接全是用的原作者的,也没有经过精简和编辑, ...

  7. Android 屏幕适配终结者

    本文作者: 布兰柯基 本文链接: https://blankj.com/2018/12/18/android-adapt-screen-killer/ 文末有彩蛋 背景 之前基于头条的适配方案写了篇文 ...

  8. Android高手笔记-屏幕适配 UI优化

    Android高手笔记-屏幕适配 & UI优化 屏幕与适配 由于Android碎片化严重,屏幕分辨率千奇百怪,而想要在各种分辨率的设备上显示基本一致的效果,适配成本越来越高: 屏幕适配究其根本 ...

  9. 今日头条适配方案_煮酒论英雄之屏幕适配

    作者:JessYan 地址:https://www.jianshu.com/p/55e0fca23b4f1 前言 这个月在 Android 技术圈中 屏幕适配 这个词曝光率挺高的,为什么这么说呢?因为 ...

最新文章

  1. spring心得5--构造器注入@设置控制@案例加注解剖析
  2. Spring Cloud 7:Gateway
  3. Linux 磁盘命令
  4. android中shape的属性
  5. btoa java,java的btoa、atob
  6. 5. Browser 对象 - Screen 对象
  7. python按键退出循环_Python的for循环退出
  8. Android SDK怎么救砖,Android手机刷机变砖后无法开机的修复方法
  9. 百度没有文化(转载)
  10. 2022年十大汽车行业新闻
  11. boost::asio::tcp
  12. 空腹不能吃的东西,可不仅仅是香蕉和柿子
  13. 欧美插画系列-张聪-专题视频课程
  14. 2020 AAAI-GMAN: A Graph Multi‐Attention Network for Traffic Prediction阅读笔记(翻译)
  15. 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!2012-6-25日更新iap恢复
  16. 文件共享-ftp、pure-ftpd、sftp共享
  17. 关于安装360安全桌面后 iis服务不好使的解决方法
  18. 一篇文章了解保险的全方面——IT工程师该怎么保护自己
  19. 程序员做笔试题时用手机查资料,面试官:我们就需要这样的人才
  20. 卡尔曼滤波器1——递归算法(笔记篇 + 代码实现)

热门文章

  1. docker中安装mongo3.2
  2. 纸质文档转成电子档,30秒即可快速搞定(亲测有效)!
  3. SqlServer 数据库修复
  4. 为什么任何数的0次幂是1(除0外)?怎么理解?
  5. Cache架构以及X86ARM @Linux平台cache eviction功能测试
  6. 【Android进阶】20、音频播放:SoundPool 类、单元测试:Espresso框架
  7. tf.keras.metrics.Accuracy;tf.keras.metrics.Precision;tf.keras.metrics.Recall
  8. Excel数据合并到统计分析自动处理的python示例(精益办公实战1)
  9. 计算机组成原理中men,东北大学秦皇岛分校计算机组成原理课程设计.doc
  10. CRNN:文本序列识别