赞
踩
问题:如题,我的这种情况出现在我是用了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而已,希望大家能够试试!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。