DisplayMetrics获取宽高不对

adb  Android  2021年9月7日 am8:08发布3年前 (2021)更新 91es.com站长
57 0 0

前言

Android P项目开发时,获取的屏幕高度存在误差,之前项目中获取的高度都是固定的,后面为了适配各种项目,改为了动态获取屏幕高宽。

记录于此,方便自己查阅。

好记性不如烂笔头

正文

Android 版本 : Android P

获取的屏幕高度错误
adb shell wm size

#打印的内容

Physical size: 1024x600

而代码中获取的

DisplayMetrics{density=1.0, width=1024, height=504, scaledDensity=1.0, xdpi=134.07, ydpi=133.684}

你会发现,少了96px。

分析问题

原因是底部导航的高度占用了96px

位置: /frameworks/base/core/res/res/values/config.xml

<!-- Height of the bottom navigation bar in portrait; often the same as @dimen/navigation_bar_height -->
<dimen name="navigation_bar_height_landscape">48dp</dimen>
<dimen name="navigation_bar_height_car_mode">96dp</dimen>
<dimen name="navigation_bar_height_landscape_car_ode">96dp</dimen>

至于具体分析,可以看引用的文章《[DisplayMetrics获取宽高不对]》,该文章的作者有对着分析。

PS: 存在导航栏在左边的,获取的宽度也存在不一致

解决问题
    //配置一个默认的高宽
    private static int screen_width = 1024;
    private static int screen_height = 600;

    public static void initSizeInfo(Activity activity) {
        if (null == activity) {
            Log.d(VideoApp.TAG, "initSizeInfo null;: ");
            return;
        }
        DisplayMetrics dm = new DisplayMetrics();
        //高版本的有底部导航,因此要获取真实的高宽,需要调用的方法不同。
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            activity.getWindowManager().getDefaultDisplay().getRealMetrics(dm);
        } else {
            activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
        }
        Log.d(VideoApp.TAG, "initSizeInfo  : " + dm.toString());
        screen_width = dm.widthPixels;
        screen_height = dm.heightPixels;
        return;
    }

    public static int getScreenWidth() {
        return screen_width;
    }

    public static int getScreenHeight() {
        return screen_height;
    }

参考文章

  1. Android中DisplayMetrics类获取屏幕尺寸
  2. DisplayMetrics获取宽高不对
  3. getResources().getDisplayMetrics().heightPixels获取到的屏幕高度不对

 历史上的今天

  1. 2023: Can't determine type for tag(0条评论)
  2. 2022: 系统应用MediaButton的使用方式(0条评论)
  3. 2019: 贾平凹:制造声音(0条评论)
版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

对Matrix.mapRect()的理解

前言在对图片操作时有用过,Matrix.mapRect(),但当时没记录一下,因此今天抽空整(摘)理(抄)一下,方便自己查阅。正文Matrix中的接口,有原文注释,大意是对矩形使用矩阵变形,也就是改变矩形中的四个点值。 public boolean mapRect(RectF rec...

JobIntentService的使用

前言简单记录一下JobIntentService的使用,后面高版本又废弃了,推荐使用Android Jetpack了。虽然废弃了,但还是记录一下(之前没记录)。水文一篇,哈哈,大佬们可以跳过。正文Android 8.0对系统资源的管控更加严格,添加了后台限制规则。如果满足以下任意条件...

中文汉字和英文数字的unicode编码范围

前言最近有做相关汉字转拼音处理,因此了解一下,摘抄于此,方便查阅。好记性不如烂笔头正文虽然不常用,了解一下。基本汉字有20902字。相关汉字编码介绍GB2312编码1981年5月1日发布的简体中文汉字编码国家标准。GB2312对汉字采用双字节编码,收录7445个图形字符,其中包括...

余秀华:我爱你

巴巴地活着,每天打水,煮饭,按时吃药阳光好的时候就把自己放进去,像放一块陈皮 茶叶轮换着喝:菊花,茉莉,玫瑰,柠檬这些美好的事物仿佛把我往春天的路上带 所以我一次次按住内心的雪它们过于洁白过于接近春天 在干净的院子里读你的诗歌。这人间情事恍惚如突然...

米沃什:去森林的远足

树木那么巨大,你看不见树梢。 落下的太阳收拢玫瑰色的光芒 在每棵树上,就像在烛台上面, 小小的人儿走在下面的路上。 让我们扬起头,拉着手 这样就不会在纠结的草丛迷路。 夜晚开始在花朵上加上封条, 色彩连着色彩飘下天空。 那里,上面,一次盛宴。金罐, 倒进了阿斯彭铜器的红酒。 一辆空中的车...

Square开源框架Coordinators的简单使用

Coordinators简介Coordinators是由知名公司Square开发并开源的框架,Simple lifecycle for your MVWhatever on Android. No kidding.哈哈,比较小众,但很不错的。目前国内没啥资料介绍这个和使用这个。Github地...