Android Lollipop设置状态栏文本颜色

Gha*_*den 32 android android-5.0-lollipop

我正在尝试在Android v21中设置状态栏文本颜色,但我没有看到它的API方法.这是我到目前为止的背景

MyActivity.java> onCreate:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Window window = getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

        window.setStatusBarColor(getResources().getColor(R.color.white));

    }
Run Code Online (Sandbox Code Playgroud)

显然白色背景上的白色文字将无法正常工作.我正在寻找类似的东西

window.setStatusBarTextColor(getResources().getColor(R.color.orange));
Run Code Online (Sandbox Code Playgroud)

Sun*_*ita 66

您无法通过明确指定任何颜色来设置状态栏文本颜色

但您可以尝试下面的API 23中添加的替代方案,

您可以通过两种方式使用"android:windowLightStatusBar"属性

  • "android:windowLightStatusBar"= true,当状态栏颜色浅时,状态栏文本颜色将兼容(灰色)
  • "android:windowLightStatusBar"= false,当状态栏颜色变暗时,状态栏文本颜色将兼容(白色)
<style name="statusBarStyle" parent="@android:style/Theme.DeviceDefault.Light">
        <item name="android:statusBarColor">@color/status_bar_color</item>
        <item name="android:windowLightStatusBar">false</item>
</style>
Run Code Online (Sandbox Code Playgroud)

您可以在下面的链接中查看上面的api - https://developer.android.com/reference/android/R.attr.html#windowLightStatusBar

  • 惊人.不知道那个.奇迹般有效. (3认同)

Map*_*psy 22

这是Gandalf458答案的Java实现.

/** Changes the System Bar Theme. */
@RequiresApi(api = Build.VERSION_CODES.M)
public static final void setSystemBarTheme(final Activity pActivity, final boolean pIsDark) {
    // Fetch the current flags.
    final int lFlags = pActivity.getWindow().getDecorView().getSystemUiVisibility();
    // Update the SystemUiVisibility dependening on whether we want a Light or Dark theme.
    pActivity.getWindow().getDecorView().setSystemUiVisibility(pIsDark ? (lFlags & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR) : (lFlags | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR));
}
Run Code Online (Sandbox Code Playgroud)


Gan*_*458 10

您也可以在运行时执行此操作.以下是Mono.Android使用标志SystemUiVisibility的示例.你必须做一些按位操作来改变标志.必须将您的应用程序设置为目标API 23或更高版本才能使用此标志进行编译.

//Android 6.0 introduced the ability to set a light colored text on the status bar
//MyActivity needs to be changed to your activity

if(Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.M)
{
    int newUiVisibility = (int)MyActivity.Window.DecorView.SystemUiVisibility;

    if(state == StatusBarState.Light)
    {
        //Dark Text to show up on your light status bar
        newUiVisibility |= (int)Android.Views.SystemUiFlags.LightStatusBar;
    }
    else if(state == StatusBarState.Dark)
    {
        //Light Text to show up on your dark status bar
        newUiVisibility &= ~(int)Android.Views.SystemUiFlags.LightStatusBar;
    }

    MyActivity.Window.DecorView.SystemUiVisibility = (Android.Views.StatusBarVisibility)newUiVisibility;
}

public enum StatusBarState
{
    Light,
    Dark
}
Run Code Online (Sandbox Code Playgroud)


Dha*_*mar 9

对于 Android 6.0 及以上您可以查看Sunita 的回答

安卓 5.0

我们只能更改状态栏颜色而不是状态栏文本颜色。

没有像这样的方法

setStatusBarTextColor(getResources().getColor(R.color.orange));
Run Code Online (Sandbox Code Playgroud)

简而言之,它在 Android 5.0 上是不可能的。检查这个答案


Aka*_*hra 6

适用于安卓 6.0+

您可以使用它来将状态栏内容颜色更改为在黑色背景上亮起,如下图所示。

View decorView = this.getWindow().getDecorView();
int systemUiVisibilityFlags = decorView.getSystemUiVisibility();
systemUiVisibilityFlags &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
decorView.setSystemUiVisibility(systemUiVisibilityFlags);
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

默认情况下,它是黑色的,因此将其保留为浅色背景。