Unity使用AndroidX设置状态栏的颜色透明,以及导航栏高度

第一步,导入AndroidX 库,需要在Publishing Settings => Build 中自定义MainGradleTemplate.gradle文件。

在配置文件中,增加一行导入:implementation 'androidx.core:core:1.15.0'------或对应SDK更高的版本。

第二步,在Java文件中导入命名空间。

java 复制代码
import androidx.core.view.WindowCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.core.view.WindowInsetsControllerCompat;
import androidx.core.view.ViewCompat;

第三步,使用AndroidX控制状态栏属性。

java 复制代码
AndroidHelper.activity.runOnUiThread(() -> {
    AndroidHelper.window.setDecorFitsSystemWindows(false);

    AndroidHelper.window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    AndroidHelper.window.addFlags  (WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    AndroidHelper.window.setStatusBarColor    (android.graphics.Color.TRANSPARENT);
    AndroidHelper.window.setNavigationBarColor(android.graphics.Color.TRANSPARENT);

    AndroidHelper.window.setStatusBarContrastEnforced    (false); 
    AndroidHelper.window.setNavigationBarContrastEnforced(false);

    WindowInsetsControllerCompat controller = WindowCompat.getInsetsController(AndroidHelper.window, AndroidHelper.decorView);

    if (controller != null) {
        controller.setAppearanceLightStatusBars    (true);
        controller.setAppearanceLightNavigationBars(true);
        controller.show(WindowInsetsCompat.Type.systemBars());
    }
}); 

第四步,Unity需要退出全屏状态。

cs 复制代码
Screen.fullScreen = false;

第五步,使用AndroidX获取导航栏高度。

cs 复制代码
public static int getNavigationBarHeight() {
    WindowInsetsCompat insets = ViewCompat.getRootWindowInsets(AndroidHelper.decorView);

    if (insets != null) {
        return insets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom;
    }

    return 0;
}