[Android]获取设备屏幕的实际高度(虚拟功能键/状态栏/标题栏)

详见原文Android 获取屏幕实际高度跟显示高度,判断 Android 设备是否拥有虚拟功能键

在修正一个功能是,因为手机存在虚拟功能键(底部状态栏),获取到的屏幕高度为除虚拟功能键外的屏幕高低,导致界面上显示存在误差.上文提供的方法完美的解决了我项目中存在的问题.

原项目使用的获取屏幕高度方法:

 /**
     * 获取屏幕尺寸,但是不包括虚拟功能高度
     *
     * @return
     */
    public int getNoHasVirtualKey() {
        int height = getWindowManager().getDefaultDisplay().getHeight();
        return height;
    }

而实际上,我的测试设备是存在虚拟功能键的,因此需要使用以下方法

 /**
     * 通过反射,获取包含虚拟键的整体屏幕高度
     *
     * @return
     */
    private int getHasVirtualKey() {
        int dpi = 0;
        Display display = getWindowManager().getDefaultDisplay();
        DisplayMetrics dm = new DisplayMetrics();
        @SuppressWarnings("rawtypes")
        Class c;
        try {
            c = Class.forName("android.view.Display");
            @SuppressWarnings("unchecked")
            Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);
            method.invoke(display, dm);
            dpi = dm.heightPixels;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return dpi;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,556评论 25 708
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,554评论 0 17
  • 内容抽屉菜单ListViewWebViewSwitchButton按钮点赞按钮进度条TabLayout图标下拉刷新...
    皇小弟阅读 46,903评论 22 665
  • 关于\u001b转义字符 在nodejs中有这样一段代码可以使得控制台输出显示颜色,process.stderr....
    清水芦苇阅读 23,799评论 0 1
  • 今天在厕所的时候,我觉得有点生气,感觉被攻击了。然后我在想是谁感觉被攻击了?是谁在生气呢?得到的答案是小我。大我是...
    吴黄龙本人阅读 518评论 0 0