Цвет шрифта строки состояния не изменяется с фрагментом Darktheme в android - PullRequest
4 голосов
/ 27 апреля 2020

Я установил две темы в своем приложении AppTheme & DarkTheme

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

Когда я использую фрагмент в действии, как, например, использование MainFragment в MainActivity, тогда цвет строки состояния не будет белым

Когда я использую Only Activity, его дать правильный результат в той же теме с белым цветом шрифта в строке состояния.

Стиль. xml


  <style name="DarkTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/colorPrimaryD</item>
        <item name="colorPrimaryDark">@color/color_82828C</item>
        <item name="colorAccent">@color/color_f85200</item>
        <item name="color_background">@color/color_background_night_light_black</item>
        <item name="color_background_d">@color/color_background_night_dark_black</item>
        <item name="color_icon">@color/color_icon_ffffff</item>
        <item name="color_black_white">@color/colorWhite</item>
        <item name="color_catlist_bg">@color/color_background_night_dark_black</item>
        <item name="color_icon_border">@color/color_icon_border_night</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="colorControlHighlight">@color/ripple_colorD</item>
        <item name="android:windowDisablePreview">true</item>
    </style>


    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="color_background">@color/color_background_day</item>
        <item name="color_background_d">@color/colorWhite</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/color_f85200</item>
        <item name="color_icon">@color/color_icon_3b3b3b</item>
        <item name="color_black_white">@color/colorBlack</item>
        <item name="color_catlist_bg">@color/colorWhite</item>
        <item name="color_icon_border">@color/color_icon_border_day</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="colorControlHighlight">@color/ripple_color</item>
        <item name="android:windowDisablePreview">true</item>
    </style>


1) Панель состояния Apptheme правильный

enter image description here

2) Цвет шрифта строки состояния DarkTheme черный, я хочу белый цвет шрифта

enter image description here

Я уже применил много решений, но не работаю в моем случае

HomeActivity. java

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTheme(R.style.DarkTheme); 
        setContentView(R.layout.activity_home);
}

Проблема с активностью с фрагментом, без фрагмента строки состояния, цвет шрифта белый, работа.

* 1 044 * если у кого-то есть решение, дайте мне предложение, если в моем случае его работа, я также правильно отмечу ответ.

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

Ответы [ 3 ]

0 голосов
/ 27 апреля 2020

Я настоятельно рекомендую вам проверить этот для реализации идеальной комбо светлой / темной темы. Сам Google приводит полный пример.

Я не знаю, почему вы переключаетесь между темами, стиль DarkTheme сегодня больше не требуется, поскольку мы можем использовать night/colors.xml и night/styles.xml. В обоих из них вы можете переопределить ваши ресурсы светлой темы. Проверьте это.

0 голосов
/ 27 апреля 2020

Примечание. Цветность строки состояния не поддерживается ниже уровня API 21.

Для API 21 и выше 21

Вы можете изменить его, установив атрибут android: statusBarColor или android: colorPrimaryDark стиля, который вы используете для своего приложения в стилях. xml.

(android: statusBarColor наследует значение android: colorPrimaryDark по умолчанию)

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimaryDark">@color/your_custom_color</item>
</style>

На уровне API 21+ вы также можете использовать метод Window.setStatusBarColor () из кода.

// getWindow() is a method of Activity
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

Hope это поможет.

0 голосов
/ 27 апреля 2020

Если вы измените цвет шрифта строки состояния белым, используйте эту функцию,

Для Java,

public static void setLightStatusBar(Activity activity){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            int flags = activity.getWindow().getDecorView().getSystemUiVisibility();
            flags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
            activity.getWindow().getDecorView().setSystemUiVisibility(flags);
        }
    }

Для kotlin используйте эту функцию расширения,

fun Activity.setLightStatusBar() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        var flags = window.decorView.systemUiVisibility
        flags =
            flags and View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv()
        window.decorView.systemUiVisibility = flags
    }
}

Если вы хотите очистить строку состояния освещения и восстановить предыдущее состояние, используйте эту функцию:

Для Java,

 public static void clearLightStatusBar(Activity activity) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            Window window = activity.getWindow();
            window.setStatusBarColor(ContextCompat
                    .getColor(activity, R.color.colorPrimaryDark));
        }
    }

Для Kotlin,

fun Activity.clearLightStatusBar() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        window.statusBarColor = ContextCompat
            .getColor(this, R.color.colorPrimaryDark)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...