在我们调用软键盘的时候需要EditText
在软键盘之上一起弹出,正常情况下我们都会在AndroidManifest.xml
中设置android:windowSoftInputMode="stateHidden|adjustResize"
属性已达到此效果,但是当我们的布局中有ToolBar
存在的时候我们会发现这个属性失效了,这个时候可能有些人会首先想到android:fitsSystemWindows="true"
属性,但是当我们在根布局中设置此属性的时候,会发现ToolBar
被拉长了。这里给大家介绍一个非常不错的工具类:
/**
* Created by xiaolong on 2017/8/2.
*/
public class AndroidBug5497Workaround {
public static void assistActivity(View content) {
new AndroidBug5497Workaround(content);
}
private View mChildOfContent;
private int usableHeightPrevious;
private ViewGroup.LayoutParams frameLayoutParams;
private AndroidBug5497Workaround(View content) {
if (content != null) {
mChildOfContent = content;
mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
public void onGlobalLayout() {
possiblyResizeChildOfContent();
}
});
frameLayoutParams = mChildOfContent.getLayoutParams();
}
}
private void possiblyResizeChildOfContent() {
int usableHeightNow = computeUsableHeight();
if (usableHeightNow != usableHeightPrevious) {
//如果两次高度不一致
// 将计算的可视高度设置成视图的高度
frameLayoutParams.height = usableHeightNow;
mChildOfContent.requestLayout();//请求重新布局
usableHeightPrevious = usableHeightNow;
}
}
private int computeUsableHeight() {
//计算视图可视高度
Rect r = new Rect();
mChildOfContent.getWindowVisibleDisplayFrame(r);
return (r.bottom);
}
}
在我们的Activity中调用此类,我们便可以解决上述问题:
AndroidBug5497Workaround.assistActivity(findViewById(android.R.id.content));
这个问题是我在做项目中遇到的问题,试过很多种方法总感觉不是太尽人意,查了好多资料发现了这个方法,记录下,以备以后用到,哈哈!