Подтвердить что ты не робот

Изменение цвета строки строки состояния, когда primaryDark белый

Я пытаюсь воспроизвести поведение приложения Календаря Google: введите описание изображения здесь

но я не нашел способ изменить цвет текста статуса. Если я установил colorPrimaryDark как белый, я не вижу иконки ни текста строки состояния, потому что их цвет также белый.

Есть ли способ изменить цвет текста в строке состояния?

Заранее спасибо

4b9b3361

Ответ 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