Android 沉浸式挡住虚拟键盘
方法一
第一步添加这两个方法
/**
* 设置状态栏透明
* 使用于非为DrawerLayout.当以图片作为背景时,图片会铺满全屏
*/
public void setStatusBarTransparent(Activity context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//设置状态栏透明
context.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//设置跟布局的参数,让布局从状态栏下方开始,而不是跟状态栏重合
ViewGroup rootView = (ViewGroup) ((ViewGroup) context.findViewById(android.R.id.content)).getChildAt(0);
rootView.setFitsSystemWindows(false);
rootView.setClipToPadding(false);
}
}
/**
* 虚拟键盘
*/
public void setbbh() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
try {
@SuppressLint("PrivateApi") Class decorViewClazz = Class.forName("com.android.internal.policy.DecorView");
Field field = decorViewClazz.getDeclaredField("mSemiTransparentStatusBarColor");
field.setAccessible(true);
field.setInt(getWindow().getDecorView(), Color.TRANSPARENT); //改为透明
} catch (Exception e) {
e.getStackTrace();
}
}
}
第二步 activity 调用
方法二
设置沉浸式后设置getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
(备注:如方法一不生效使用方法二亲测方,法二有效,方法一偶尔有效)