美文网首页程序员
Android判断输入法是否弹出

Android判断输入法是否弹出

作者: lipyhui | 来源:发表于2019-02-25 11:20 被阅读0次

本文借鉴:https://blog.csdn.net/sinat_31311947/article/details/53899166。本文只做简单笔记,详情见博主博客!
感谢博主分享!

简介

一、有缺陷判断方式

  各大博客提供各种方式来判断输入法是否处于弹出的状态,在某些特定状态下,会出现判断错误的情况,此处不多说这些方式。
  我使用的是如下方法来判断输入法是否弹出,但同样有缺陷。缺陷原因是我们平台的Android系统升级到9.0之后,支持自配置是显示虚拟导航栏,还是手势返回等操作。这时通过getWindow().getDecorView().getHeight();获取的高度为屏幕的物理高度,而非应用的高度,因此出现判断错误的状况!

private boolean isInputMethodShowing() {
        //获取当前屏幕内容的高度
        int screenHeight = getWindow().getDecorView().getHeight();
        //获取View可见区域的bottom
        Rect rect = new Rect();
        getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);

        return screenHeight - rect.bottom != 0;
    }

二、修正方式

  之前担心减去底部导航栏会导致以前的系统出现问题,后看了博主博客后果断尝试了一下,经测试不影响老板系统的正常使用!修正后的方式如下:

private boolean isInputMethodShowing() {
        //获取当前屏幕内容的高度
        int screenHeight = getWindow().getDecorView().getHeight();
        //获取View可见区域的bottom
        Rect rect = new Rect();
        getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);

        return screenHeight - rect.bottom - getSoftButtonsBarHeight() != 0;
    }

    /**
     * 底部虚拟按键栏的高度
     * @return
     */
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    private int getSoftButtonsBarHeight() {
        DisplayMetrics metrics = new DisplayMetrics();
        //这个方法获取可能不是真实屏幕的高度
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        int usableHeight = metrics.heightPixels;
        //获取当前屏幕的真实高度
        getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
        int realHeight = metrics.heightPixels;
        if (realHeight > usableHeight) {
            return realHeight - usableHeight;
        } else {
            return 0;
        }
    }

  据说小米mix2s有问题,但是由于本人没法弄到mix2s,所以没法调试问题。如果有其他机型同样有问题,欢迎反馈!谢谢!

相关文章

网友评论

    本文标题:Android判断输入法是否弹出

    本文链接:https://www.haomeiwen.com/subject/mpfwyqtx.html