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