Цвет строки состояния Android на другом уровне API

#android #android-styles

#Android #android-стили

Вопрос:

Я пытаюсь установить цвета строки состояния, но у меня проблемы с другим уровнем api.

Я хочу темный цвет значка и желтый фон. Я установил стиль версии, но он не настроен для уровня API 21. Пожалуйста, взгляните на скриншот, выделенный красным.

введите описание изображения здесь

Вот код

v23styles.xml

 <style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowBackground">@color/colorPrimaryBackground</item>
    <item name="android:textColor">@color/colorPrimaryText</item>
    <item name="android:windowLightStatusBar">true</item>
</style>
  

По умолчанию styles.xml

 <style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowBackground">@color/colorPrimaryBackground</item>
    <item name="android:textColor">@color/colorPrimaryText</item>
</style>
  

Ответ №1:

То, что вы хотите сделать, возможно для api> 23, Попробуйте следующий код:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
 View decor = getWindow().getDecorView();
 if (shouldChangeStatusBarTintToDark) {
    decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
 } else {
    // We want to change tint color to white again.
    // You can also record the flags in advance so that you can turn UI back completely if
    // you have set other flags before, such as translucent or full screen.
    decor.setSystemUiVisibility(0);
 }
}
  

Комментарии:

1. Я вижу. Таким образом, мы можем изменить цвета значков только api> 23? что будет делать предоставленный вами код?

2. Да, вы можете сделать это для > 23. Предоставленный мной код будет динамически выполнять то же самое, что вы уже делаете. Единственное отличие заключается в том, что для api менее 23 вы можете определить поведение, которое вы хотите сделать, или сохранить его по умолчанию для Android. Это сделает это во время выполнения