Изменение цвета строки строки состояния, когда primaryDark белый
Я пытаюсь воспроизвести поведение приложения Календаря Google:
![введите описание изображения здесь]()
но я не нашел способ изменить цвет текста статуса. Если я установил colorPrimaryDark как белый, я не вижу иконки ни текста строки состояния, потому что их цвет также белый.
Есть ли способ изменить цвет текста в строке состояния?
Заранее спасибо
Ответы
Ответ 1
Я не уверен, на каком уровне API вы пытаетесь настроить таргетинг, но если вы можете использовать специфические вещи API 23, вы можете добавить следующее в свой стиль AppTheme.xml:
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
<item name="android:windowLightStatusBar">true</item>
когда для параметра android:windowLightStatusBar
установлено значение true, цвет текста в строке состояния можно будет увидеть, когда цвет строки состояния будет белым, и наоборот
если для параметра android:windowLightStatusBar
установлено значение false, цвет текста в строке состояния будет отображаться, когда цвет строки состояния будет темным.
Пример:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!-- Status bar stuff. -->
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
<item name="android:windowLightStatusBar">true</item>
</style>
Ответ 2
вы можете сделать это программно, как этот ответ
просто добавь это
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
Ответ 3
Как и в предыдущем случае, SYSTEM_UI_FLAG_LIGHT_STATUS_BAR выполняет работу в моем случае, не забудьте установить более высокий, чем API 22.
добавьте это в oncreate после setContentView:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
Ответ 4
Попробуйте это один раз.
В onCreate()
вашей деятельности вставьте следующий код.
try {
if (android.os.Build.VERSION.SDK_INT >= 21) {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(ContextCompat.getColor(this, R.color.color_red));
}
} catch (Exception e) {
e.printStackTrace();
}
Примечание: color_red - это цвет строки состояния.
Ответ 5
это очень просто
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);// set status text dark
getWindow().setStatusBarColor(ContextCompat.getColor(BookReaderActivity.this,R.color.white));// set status background white
и наоборот:
getWindow().setStatusBarColor(ContextCompat.getColor(BookReaderActivity.this, R.color.black));
View decorView = getWindow().getDecorView(); //set status background black
decorView.setSystemUiVisibility(decorView.getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); //set status text light