Android全屏时软键盘遮住输入框修改布局解决方案
16lz
2021-01-23
一般 *android:windowSoftInputMode="adjustResize" *就能解决软键盘遮住输入框的问题,但是当Activity设为Full Screen这个设置就无效了。
下面这个类就能解决这个问题:
public class AndroidBugWorkaround { // For more information, see https://code.google.com/p/android/issues/detail?id=5497 // To use this class, simply invoke assistActivity() on an Activity that already has its content view set. public static void assistActivity (Activity activity) { new AndroidBugWorkaround(activity); } private View mChildOfContent; private int usableHeightPrevious; private FrameLayout.LayoutParams frameLayoutParams; private AndroidBugWorkaround(Activity activity) { FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content); mChildOfContent = content.getChildAt(0); mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { public void onGlobalLayout() { possiblyResizeChildOfContent(); } }); frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams(); } private void possiblyResizeChildOfContent() { int usableHeightNow = computeUsableHeight(); if (usableHeightNow != usableHeightPrevious) { int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight(); int heightDifference = usableHeightSansKeyboard - usableHeightNow; if (heightDifference > (usableHeightSansKeyboard/4)) { // keyboard probably just became visible frameLayoutParams.height = usableHeightSansKeyboard - heightDifference; } else { // keyboard probably just became hidden frameLayoutParams.height = usableHeightSansKeyboard; } mChildOfContent.requestLayout(); usableHeightPrevious = usableHeightNow; } } private int computeUsableHeight() { Rect r = new Rect(); mChildOfContent.getWindowVisibleDisplayFrame(r); return r.bottom; }}
只需要在Activity中的 onCreate() 方法中 setContentView() 后面添加
AndroidBugWorkaround.assistActivity(this);即可。
备注:computeUsableHeight() 方法返回值根据fitSystemWindows的设置值来决定,如果布局中fitsSystemWindows="false", return r.bottom; 如果fitsSystemWindows="true", return (r.bottom - r.top);
参考链接
更多相关文章
- android的singleInstance启动模式及方法调用
- RelativeLayout相对布局方法总结
- 两种button点击后改变颜色的方法selectot和重写
- Android中设置屏幕全屏两种方法:
- Android性能优化的一些方法
- Android 4.0.3 源码编译中添加外部jar包和外部so到apk的方法
- Android中两种设置全屏的方法
- android实现字体闪烁动画的方法