项目中遇到的情况:activity设置adjustResize无效,试了各种方法都没有达到效果
方法1:完美解决:1.将最外层布局设置为ScrollView
2.监听ScrollView的变化,计算出屏幕高度(包含虚拟键),和屏幕可见高度, 两者之差就是屏幕被遮挡的高度
3.设置布局最底下控件的margin ,这样就可以滑动布局显示被遮挡的部分
/**
* 设置dialog 弹出软件盘遮挡输入框
*
* @param view1
* 最外层布局
* @param dialog
* dialog(可将dialog替换为activity、fragment)
* @param view3
* 最底下控件
*/
public static void setViewHeight(View view1, final Dialog dialog, final View view3) {
view1.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// 获取当前界面可视部分
Rect r = new Rect();
dialog.getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
// 获取屏幕的高度
int screenHeight = getWindowWidth().heightPixels;
//获取被遮挡的屏幕高度(当遮挡高度大于,则被遮挡,否则键盘未弹出)
int height = screenHeight - r.bottom;
if (height > 0) {
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) view3.getLayoutParams();
params.bottomMargin = heightDifference;
view3.setLayoutParams(params);
} else {
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) view3.getLayoutParams();
params.bottomMargin = 0;
view3.setLayoutParams(params);
}
}
});
}
/**
* 获取屏幕参数(包含虚拟键)
*
* @return
*/
private static DisplayMetrics getWindowWidth(Context context) {
WindowManager manger = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = manger.getDefaultDisplay();
DisplayMetrics displayMetrics = new DisplayMetrics();
display.getRealMetrics(displayMetrics);
return displayMetrics;
}
方法2:设置activity全屏、去掉导航栏
重写方法
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
//隐藏虚拟按键,并且全屏
if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) {
View view = activity.getWindow().getDecorView();
view.setSystemUiVisibility(View.GONE);
} else if (Build.VERSION.SDK_INT >= 19) {
View decorView = activity.getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
}