当前位置:   article > 正文

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

android fragment隐藏以后还能获取焦点 弹出软件盘吗

问题:如题,我的这种情况出现在我是用了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而已,希望大家能够试试!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/261939?site
推荐阅读
相关标签
  

闽ICP备14008679号