修改状态栏字体的主题颜色

阅读更多

以下代码需要在 API >= 23 即 最低版本Android 6.0 (M) ,才可以生效

 

public static void setStatusBarTheme(final Activity activity, final boolean needDarkFont) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        // fetch the current flags
        final int lFlags = activity.getWindow().getDecorView().getSystemUiVisibility();

        // SYSTEM_UI_FLAG_LIGHT_STATUS_BAR requests the status bar to draw in a mode
        // that is compatible with light status bar backgrounds

        // For this to take effect, the window must request FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
        // but not FLAG_TRANSLUCENT_STATUS
        activity.getWindow().getDecorView().setSystemUiVisibility(
                needDarkFont ?
                (lFlags | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR) :
                (lFlags & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR));
    }
}

 

SYSTEM_UI_FLAG_LIGHT_STATUS_BAR 告诉系统,当前的UI色彩偏淡,需要深色的字体来匹配;即设置该标志时,状态栏的字体会使用黑色;取反之后,系统会设置状态栏的字体为白色。

 

注意,根据API文档说明,要想该flag生效,需要同时设置 FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, 而且取消设置 FLAG_TRANSLUCENT_STATUS, 对应的代码为

Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

 

 

refer Android Lollipop Set Status Bar Text Color

 

 

 

 

 

 

你可能感兴趣的:(status,bar,color)