Змінюйте колір тексту рядка стану, коли PrimaryDark білий


87

Я намагаюся відтворити поведінку програми Google Calendar: введіть тут опис зображення

але я не знайшов способу змінити колір тексту стану. Якщо я встановив colorPrimaryDark як білий, я не бачу значків і тексту рядка стану, оскільки їх колір теж білий.

Чи є спосіб змінити колір тексту рядка стану?

Спасибі заздалегідь

Відповіді:


174

Я не впевнений, на який рівень 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>

38
якщо мій рівень api 21 не працює, можете сказати мені альтернативу цьому
saikrupa

8
Будь-яке рішення для Api 21. Будь ласка, допоможіть?
iMDroid

1
Примітка: android: windowLightStatusBar вимагає рівень API 23 (поточний хв - 21) ще ... (⌘F1)
Хардік Дарджі

Для api 21 це неможливо. У програмах Google це чорна смужка, а не біла.
Йоріс

1
Дивіться цю публікацію щодо рівня API <23: stackoverflow.com/questions/49254877/…
Басті Вагабонд

30

Ви можете зробити це програмно, як ця відповідь

просто додайте це

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

14

це дуже просто:

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

4

Як і попередній, 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);
}

1
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//  set status text dark

getWindow().setStatusBarColor(ContextCompat.getColor(MainActivity.this,R.color.colorPrimaryDark));// set status background white

Це працює для мене


Для цього потрібен рівень API 23+.
кандзі

0

Спробуйте це один раз.

В 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 - це колір рядка стану.


2
Питання стосується кольору тексту рядка стану, а не фону панелі стану.
кандзі

0

У своєму onCreate()методі активності вставте наступний код післяsetContentView(R.layout.activity_generic_main);

Ось зразок коду нижче.

public class GenericMain extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_generic_main);
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

    }
}

0

Спробуйте це, якщо не сплеск сторінки

getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
getActivity().getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getActivity().getWindow().setNavigationBarColor(ContextCompat.getColor(context, R.color.white));
getActivity().getWindow().setStatusBarColor(ContextCompat.getColor(context, R.color.white));
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.