android软键盘弹起面试题

版权声明:本文为博主原创文章,转载希望能注明出处,感谢。 https://blog.csdn.net/u010126792/article/details/82848970

软键盘弹起后遮挡布局有什么解决方案?

1设置windowSoftInputMode 软键盘弹起时布局自动变化或许可以解决

2监听根布局变化,获取软键盘高度,然后滚动或移动界面

windowSoftInputMode中adjustResize和adjustPan什么区别?

adjustResize会改变activity的高度,adjustPan会移动布局

一个登陆界面,输入框和按钮,键盘弹起时会遮挡按钮,如何做使按钮不被遮挡?

如果登陆界面很简单,只有输入框和登陆按钮此时可以设置windowSoftInputMode为adjustResize,

只要保证输入框和按钮再activity高度变化时还能完全显示在Activity中此时按钮就不会被遮挡,如果

输入框上部已经有内容且高度加上输入框和按钮高度后大于屏幕高度减去软键盘高度的长度,依然没法解决。

设置adjustpan只能保证当前获取焦点的控件不被遮挡。

还有一种办法就是监听根布局变化(OnGlobalLayoutListener),利用scrollTo等移动布局。

全屏模式下软键盘弹起的bug遇到过没有?

设置了activity全屏显示,此时设置windowSoftInputMode为adjustResize或者监听根布局OnGlobalLayoutListener都会失效。

此为android系统bug,网上解决方案是监听android.R.id.content 根布局的第一个孩子,通过检测getWindowVisibleDisplayFrame,判断是否有软键盘弹起,然后调用重新布局requestLayout函数解决。

获取软键盘高度方法?

我常用方法:
    //layout change
    private void controlKeyboardLayout(final View root, final View needToScrollView) {
        root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            private Rect r = new Rect();
            @Override
            public void onGlobalLayout() {
//获取可视区域,弹起键盘时可视区域不包括软键盘
                ((Activity) mContext).getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
//根布局高度
                int screenHeight = ((Activity) mContext).getWindow().getDecorView().getRootView().getHeight();
//布局高度减去可视区域底部坐标
                int heightDifference = screenHeight - r.bottom;
                //bottomStatusHeight 代表底部导航高度,虚拟按键
                if (heightDifference == bottomStatusHeight) {
            //此时没有软键盘
                    needToScrollView.scrollTo(0, 0);
                } else {
//此时存在软键盘
                  
              
            }
        });
    }

猜你喜欢

转载自blog.csdn.net/u010126792/article/details/82848970