你以一个10年经验的高级Android开发的身份,给我写一个java工具类SystemUiUtil,要求适配Android11系统,需要有设置沉浸式,取消沉浸式,隐藏底部导航栏,显示底部导航栏,隐藏顶部状态栏和标题栏,显示顶部状态栏和标题栏,设置全屏,取消全屏的方法,并为每一行代码加上注释,代码要精简
时间: 2023-06-04 19:05:20 浏览: 305
好的,下面是 SystemUiUtil 工具类的代码:
```java
import android.app.Activity;
import android.os.Build;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
/**
* 系统 UI 工具类,用于设置沉浸式、隐藏底部导航栏、显示底部导航栏、隐藏顶部状态栏和标题栏、显示顶部状态栏和标题栏、设置全屏、取消全屏等。
* 仅适配 Android 11 系统及以上。
*/
public class SystemUiUtil {
/**
* 设置应用程序窗口为沉浸式模式
*
* @param activity 需要设置的 Activity
*/
public static void setImmersiveMode(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
Window window = activity.getWindow();
WindowManager.LayoutParams params = window.getAttributes();
params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
window.setDecorFitsSystemWindows(false);
window.setAttributes(params);
window.getInsetsController().hide(WindowInsets.Type.statusBars() | WindowInsets.Type.navigationBars());
}
}
/**
* 取消沉浸式模式,并显示系统 UI
*
* @param activity 需要设置的 Activity
*/
public static void clearImmersiveMode(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
Window window = activity.getWindow();
WindowManager.LayoutParams params = window.getAttributes();
params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT;
window.setDecorFitsSystemWindows(true);
window.setAttributes(params);
window.getInsetsController().show(WindowInsets.Type.statusBars() | WindowInsets.Type.navigationBars());
}
}
/**
* 隐藏底部导航栏
*
* @param activity 需要设置的 Activity
*/
public static void hideNavigationBar(Activity activity) {
View decorView = activity.getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
decorView.setSystemUiVisibility(uiOptions);
}
/**
* 显示底部导航栏
*
* @param activity 需要设置的 Activity
*/
public static void showNavigationBar(Activity activity) {
View decorView = activity.getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_VISIBLE;
decorView.setSystemUiVisibility(uiOptions);
}
/**
* 隐藏顶部状态栏和标题栏
*
* @param activity 需要设置的 Activity
*/
public static void hideStatusBar(Activity activity) {
View decorView = activity.getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
}
/**
* 显示顶部状态栏和标题栏
*
* @param activity 需要设置的 Activity
*/
public static void showStatusBar(Activity activity) {
View decorView = activity.getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_VISIBLE;
decorView.setSystemUiVisibility(uiOptions);
}
/**
* 设置为全屏模式
*
* @param activity 需要设置的 Activity
*/
public static void setFullScreen(Activity activity) {
activity.requestWindowFeature(Window.FEATURE_NO_TITLE);
activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
activity.getWindow().setDecorFitsSystemWindows(false);
activity.getWindow().setInsetsControllerCollapsed(false);
}
}
/**
* 取消全屏模式
*
* @param activity 需要设置的 Activity
*/
public static void clearFullScreen(Activity activity) {
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
}
}
```
注意,由于本工具类只适配 Android 11 及以上系统,因此在使用时需先判断当前系统版本。另外,本工具类只提供了最基本的系统 UI 控制功能,如果有其它需求,请自行扩展。
阅读全文