android软键盘弹起面试题

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

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

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

windowSoftInputMode中adjustResize和adjustPan什么区别?

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

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

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

只要保证输入框和按钮再activity高度变化时还能完全显示在Activity中此时按钮就不会被遮挡(类似使用了layout_weight),

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

设置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 {
//此时存在软键盘
                  
              
            }
        });
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值