沉浸式暗黑模式开发

70 阅读1分钟

设置状态栏透明,需要适配5.0和4.4,添加单独判断逻辑

private void modifyWindowStatusBar() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        //5.0 全透明实现
        Window window = getActivity().getWindow();
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(Color.TRANSPARENT);
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        //4.4 全透明状态栏
        getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    }
}

设置状态栏颜色适配暗黑模式,色值通过参数传入

public static void updateStatusBarColor(Window window, int colorInt, boolean isDarkTitle) {
    LoggerFactory.getTraceLogger().debug("ImmersiveModeUtil", "updateStatusBarColor:window = [" + window + "], colorInt = [" + colorInt + "]");

    try {
        if (Build.VERSION.SDK_INT >= 23 && window != null) {
            window.addFlags(-2147483648);
            window.clearFlags(67108864);
            window.setStatusBarColor(colorInt);
            View decorView = window.getDecorView();
            if (decorView != null) {
                if (isDarkTitle) {
                    decorView.setSystemUiVisibility(decorView.getSystemUiVisibility() | 8192);
                } else {
                    decorView.setSystemUiVisibility(decorView.getSystemUiVisibility() & -8193);
                }
            }
        }
    } catch (Exception var5) {
        Map<String, String> map = new HashMap();
        if (window != null && window.getContext() != null) {
            map.put("context", window.getContext().toString());
        }

        map.put("exception", var5.toString());
        LoggerFactory.getMonitorLogger().mtBizReport("BIZ_LAUNCHER", "ImmersiveModeUtil", "updateStatusBarColor_failed", (Map) null);
    }

}

public static void updateStatusTextColor(Window window, boolean isDarkTitle) {
    LoggerFactory.getTraceLogger().debug("ImmersiveModeUtil", "updateStatusBarColor:window = [" + window + "], isDarkTitle = [" + isDarkTitle + "]");
    try {
        if (Build.VERSION.SDK_INT >= 23 && window != null) {
            View decorView = window.getDecorView();
            if (decorView != null) {
                if (isDarkTitle && (!AUTokenManager.isSupportDarkMode(window.getContext()) ||
                        !AUTokenManager.isDarkMode(window.getContext()))) {//当暗黑模式时状态栏不允许设置成黑色
                    decorView.setSystemUiVisibility(decorView.getSystemUiVisibility() | 8192);
                } else {
                    decorView.setSystemUiVisibility(decorView.getSystemUiVisibility() & -8193);
                }
            }
        }
    } catch (Exception var5) {
        AliUserLog.e(TAG, var5);
    }
}