当在fragment中有editext控件获取焦点弹出软键盘之后再隐藏软件盘时,如果在布局中使用的fitsystemwindows=true,界面顶部会有一个padding值,这种情况如何处理?

问题:如题,我的这种情况出现在我是用了Tinimanager所做的沉浸式效果,同时在这个fragment的布局文件的最外层容器控件使用了android:fitsystemwindows=true;期间使用各种方法如加上或者去掉scrollview,加上或者去掉android:fitsystemwindows=true,修改minifest文件中这个activity的windowsoftinputmode,都没有任何作用。


解决办法:由于软件盘的弹起和隐藏是可以被界面所监听到的,所以这里我采取的办法是让这个布局中的一个控件去监听软键盘的动作,解决了这个问题,但是仍然有一点小小的瑕疵:界面会有类似于闪屏的那种抖动情况,希望有解决办法的大佬提供出来共勉。


问题截图:注意看布局顶部

正常情况下键盘隐藏后:


问题情况下键盘隐藏后


解决代码如下:

private  isInputMethodOccured=0;

 //监听软键盘是否显示或隐藏
        ll_parent.getViewTreeObserver().addOnGlobalLayoutListener(
                new ViewTreeObserver.OnGlobalLayoutListener() {
                    @Override
                    public void onGlobalLayout() {
                        Rect r = new Rect();
                        ll_parent.getWindowVisibleDisplayFrame(r);
                        int screenHeight = ll_parent.getRootView()
                                .getHeight();
                        int heightDifference = screenHeight - (r.bottom);
//                        Toast.makeText(activity, "heightDiff"+heightDifference, Toast.LENGTH_SHORT).show();
                        if (heightDifference > 200) {
                            //软键盘显示
                            isInputMethodOccured=1;
//                            ll_parent.setPadding(0,0,0,0);
                            if(!et_dicrectmoney.isFocused()){
                                ll_parent.setPadding(0,0,0,0);
                            }
                        } else {
                            //软键盘隐藏
                            if(isInputMethodOccured==1){
                                ll_parent.setPadding(0,0,0,0);
                            }
                            isInputMethodOccured=-1;
                        }
                    }

                });
 

代码的意思就是利用这个界面的布局中的最外层容器ll_parent来监听软件盘的状态,然后来设置这个fragment距离他所在的activity的顶部padding为(0,0,0,0)即可,isInputMethodOccured为一个判断软件盘状态的标志位。


有的朋友碰到的是其他的问题:activity中的软件盘不会将布局中的edittext顶到软件盘之上,这其实就是缺少一个scrollview而已,希望大家能够试试!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值