美文网首页
Android手机软键盘遮挡布局控件

Android手机软键盘遮挡布局控件

作者: Guoozx | 来源:发表于2017-07-25 16:36 被阅读0次

    在Activity中的布局的下方有EditText获取焦点弹出软键盘的时候,如果不作处理,软键盘可能会遮挡输入框或者一些按键,这样的用户体验比较差。
    这里整理了几种处理方式,可以使页面整体上移。并且提供一种个人比较喜欢的方法。

    网上常见的三种:

    • 1.修改AndroidManifest.xml文件
    Android:windowSoftInputMode="stateVisible|adjustResize"
    
    • 2.在Activity中添加配置

    在activity中的onCreate中setContentView之前写上这个代码:

     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
    

    其实第二中方式与第一种是一样的,只不过放的位置不同而已。

    • 3.在布局文件中添加ScrollView

    把顶级的layout替换成ScrollView,或者说在顶级的Layout上面再加一层ScrollView。
    这样就会把软键盘和输入框一起滚动了,软键盘会一直处于底部。

    个人推荐

    上面三种都是比较简单处理,但灵活性较低。软键盘使整体上移可能造成一些控件上移出屏幕无法展示。以下方式就可以比较灵活的控制底部显示的控件是什么。

    先看下效果图:

    软键盘.gif

    将如下方法放到onCreate初始化View之后就可以。

        /**
         * 1、获取main在窗体的可视区域
         * 2、获取main在窗体的不可视区域高度
         * 3、判断不可视区域高度
         *   ①大于180:键盘显示  获取Scroll的窗体坐标,算出main需要滚动的高度,使scroll显示。
         *   ②小于180:键盘隐藏
         *   该值根据屏幕可以做出修改,在大屏手机上可以适当的调大,不然会出现问题。
         *
         * @param main   根布局
         * @param scroll 需要显示的最下方View
         */
        public void addLayoutListener(final View main, final View scroll) {
            main.getViewTreeObserver().addOnGlobalLayoutListener(() -> {
                Rect rect = new Rect();
                main.getWindowVisibleDisplayFrame(rect);
                int mainInvisibleHeight = main.getRootView().getHeight() - rect.bottom;
    
                if (mainInvisibleHeight > 180) {
                    int[] location = new int[2];
                    scroll.getLocationInWindow(location);
                    int scrollHeight = (location[1] + scroll.getHeight() + ((RelativeLayout.LayoutParams) scroll.getLayoutParams()).bottomMargin) - rect.bottom;
                    if (scrollHeight > 0) {
                        main.scrollTo(0, scrollHeight);
                    }
                } else {
                    main.scrollTo(0, 0);
                }
            });
        }
    

    相关文章

      网友评论

          本文标题:Android手机软键盘遮挡布局控件

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