Цвет текста на панели 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));

    }

Очевидно, что белый текст на белом фоне не будет работать. Я ищу что-то вроде

window.setStatusBarTextColor(getResources().getColor(R.color.orange));

Ответы

Ответ 1

Для Android 6.0 и выше Вы можете проверить ответ Sunita.

Android 5.0

мы можем изменить только цвет строки состояния, а не цвет текста строки состояния.

нет такого метода, как

setStatusBarTextColor(getResources().getColor(R.color.orange));

Короче говоря, это невозможно на Android 5.0. Проверьте этот ответ

Ответ 2

Вы не можете установить цвет текста в строке состояния, указав любой цвет явно

Но вы можете попробовать альтернативу, которая добавлена ​​в 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>

Вы можете проверить выше api в ссылке ниже - https://developer.android.com/reference/android/R.attr.html#windowLightStatusBar

Ответ 3

Здесь реализована реализация Java Gandalf458.

/** 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));
}

Ответ 4

Вы также можете сделать это во время выполнения. Вот пример для 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
}

Ответ 5

ДЛЯ ANDROID 6. 0+

Это можно использовать для изменения цвета содержимого строки состояния на черный на фоне, как показано на рисунке ниже.

View decorView = this.getWindow().getDecorView();
int systemUiVisibilityFlags = decorView.getSystemUiVisibility();
systemUiVisibilityFlags &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
decorView.setSystemUiVisibility(systemUiVisibilityFlags);

enter image description here

По умолчанию он черный, поэтому оставьте его на светлом фоне.

Ответ 6

Вы можете использовать эту строку, чтобы установить более темный цвет текста, когда вы используете белый цвет для строки состояния.

window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

Ответ 7

Мое предпочтительное решение до сих пор

if (Build.VERSION.SDK_INT> = Build.VERSION_CODES.M) {getWindow(). getDecorView(). setSystemUiVisibility (View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); } else {getWindow(). getDecorView(). setSystemUiVisibility (View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); getWindow(). setStatusBarColor (ContextCompat.getColor(MainActivity.this, R.color.colorSecondPrimaryColor)); }