目录
1.关键方法
去掉小白条参考:https://juejin.cn/post/7090385839619833893
该方法在小米手机上测试去掉了手势栏与状态栏;
关键方法1:
WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
该方法使得布局内容能够扩展到顶部的状态栏以及底部的导航栏
关键方法2:
方法1将内容延展到状态栏与手势导航栏的下面,于是方法2只需要将状态栏以及底部手势导航栏的颜色设置透明即可。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// 设置导航栏和状态栏的颜色
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().setNavigationBarColor(color);
getWindow().setStatusBarColor(color);
}
关键方法3:
方法3修改状态栏上系统通知的图标与字体颜色
View decor = activity.getWindow().getDecorView();
if (dark) {
// 设置状态栏为亮色模式(深色图标)
decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
} else {
// 设置状态栏为暗色模式(浅色图标)
decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
}
2.在项目中的应用
此处将上面的三个方法放进项目的基类里面,其他Activity继承该类即可设置所有页面全屏显示
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置布局文件
setContentView(getLayoutId());
// 初始化视图组件
initViews(savedInstanceState);
// 设置全屏模式并隐藏状态栏和导航栏
setFullscreen(false, false);
// 设置状态栏的图标和文本为深色(亮色状态栏)
setAndroidNativeLightStatusBar(this, false);
}
/**
* 设置 Android 状态栏的图标和文本颜色
*
* @param activity 当前的 Activity
* @param dark 是否设置为深色模式
* true: 状态栏图标和文本为深色(背景为浅色)
* false: 状态栏图标和文本为浅色(背景为深色)
*/
private static void setAndroidNativeLightStatusBar(Activity activity, boolean dark) {
View decor = activity.getWindow().getDecorView();
if (dark) {
// 设置状态栏为亮色模式(深色图标)
decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
} else {
// 设置状态栏为暗色模式(浅色图标)
decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
}
}
/**
* 设置全屏模式,并根据参数选择是否显示状态栏和导航栏
*
* @param isShowStatusBar 是否显示状态栏
* true: 显示状态栏
* false: 隐藏状态栏
* @param isShowNavigationBar 是否显示导航栏
* true: 显示导航栏
* false: 隐藏导航栏
*/
public void setFullscreen(boolean isShowStatusBar, boolean isShowNavigationBar) {
/* int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;*/
/*
if (!isShowStatusBar) {
// 如果不显示状态栏,则设置为全屏模式
uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_FULLSCREEN;
} else {
// 保持状态栏可见但扩展到全屏
uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
}
if (!isShowNavigationBar) {
// 如果不显示导航栏,则隐藏导航栏
uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
} else {
// 保持导航栏可见但扩展到全屏
uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
}*/
/*int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
// 设置系统 UI 选项
getWindow().getDecorView().setSystemUiVisibility(uiOptions);*/
WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
// 设置导航栏和状态栏的颜色为透明,并设置为亮色状态栏
setNavigationStatusColor(Color.TRANSPARENT, true);
}
/**
* 设置导航栏和状态栏的颜色
*
* @param color 要设置的颜色
* @param isLightStatusBar 是否设置状态栏为亮色模式(深色图标)
* true: 状态栏图标和文本为深色(背景为浅色)
* false: 状态栏图标和文本为浅色(背景为深色)
*/
public void setNavigationStatusColor(int color, boolean isLightStatusBar) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// 设置导航栏和状态栏的颜色
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().setNavigationBarColor(color);
getWindow().setStatusBarColor(color);
}
}
/**
* 获取布局文件的资源 ID
*
* @return 布局文件的资源 ID
*/
protected abstract int getLayoutId();
/**
* 初始化视图组件
*
* @param savedInstanceState 保存的实例状态
*/
protected abstract void initViews(@Nullable Bundle savedInstanceState);
@Override
protected void onDestroy() {
super.onDestroy();
}
}