Как сделать строку состояния белой с черными значками?

86

Я хочу изменить цвет строки состояния для своего приложения, чтобы он был белым с черными значками (вместо черного по умолчанию с белыми значками). Есть ли способ сделать это?

Джон
источник
Измените тему по умолчанию
Rohit5k2
на какую тему я должен ее изменить, чтобы значки панели уведомлений стали черными?
Джон
Используйте настраиваемую тему. Для того, чтобы начать с SEE stackoverflow.com/questions/8024706/...
Rohit5k2
А как насчет приложений, которые следуют рекомендациям Android и имеют белые значки уведомлений, как вы ожидаете, что пользователь увидит их, когда они находятся в вашем приложении?
tyczj
2
но вы не можете изменить цвет ресурсов других приложений, на самом деле Lollipop делает все значки белыми, несмотря ни на что
tyczj

Ответы:

129

С Android M (уровень API 23) вы можете добиться этого из темы с android:windowLightStatusBarатрибутом.

Редактировать :

Как упоминал Pdroid, это также можно сделать программно:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); 
буграоральный
источник
2
можно программно установить?
Busylee
@busylee, я думаю, вы можете создать дочерний элемент своей темы и изменить его там и применить с помощью activity.getTheme.setTo (Theme another)
bugraoral
Привет, @wrecker, у меня такая же проблема со значком уведомления приложения. Я добавил android: windowLightStatusBar = true в свою тему, и я тестирую его на Android M., но белый значок уведомления не меняется на серый, когда я меняю тему с помощью стороннего приложения для запуска (Nova Launcher). Я перепробовал все возможные способы, но пока не смог это исправить. Если вы можете мне помочь, буду благодарен.
Суджит
1
@busylee Да, вы можете установить его в любое время, используя следующий метод: View.setSystemUiVisibility (View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); К ответу следует добавить
Pdroid
6
что, если я хочу использовать в 22 или более ранних версиях?
Дхара Патель,
46

Можно сделать белую строку состояния с серыми значками, например, таким образом для SDK> = 23 (см. Документацию ):

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowLightStatusBar">true</item>
</style>

в вашем файле styles.xml и установите colorPrimaryбелый цвет или программно:

getWindow().setStatusBarColor(Color.WHITE);
Раммгарот
источник
2
Он был добавлен в API 23, а не 21 - см. Документацию
Вадим Котов
эй, @VadimKotov, на самом деле я написал, SDK >= 23но @being_sohelkhan по какой-то причине отредактировал мой исходный ответ ... stackoverflow.com/posts/46897243/revisions
Rammgarot
16

Только что добавил в мои действия на Котлине:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                window.decorView.systemUiVisibility =View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
                window.statusBarColor = Color.WHITE
            }
Серг Бурлака
источник
7

просто добавьте это к своему стилю

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>

установите android: windowDrawsSystemBarBackgrounds в значение true * . Это флаг, описание которого приведено ниже:

Флаг, указывающий, отвечает ли это Окно за отрисовку фона для системных полос. Если задано значение true и окно не плавающее, системные панели отображаются с прозрачным фоном, а соответствующие области в этом окне заполняются цветами, указанными в {@link android.R.attr # statusBarColor} и {@link android.R .attr # navigationBarColor}. Соответствует {@link android.view.WindowManager.LayoutParams # FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS}.

Айеджуни Илемобайо Кингз
источник
2

Вы можете использовать это так в Котлине

 window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR

Не забудьте позвонить onCreate()передsetContentView()

Gastón Saillén
источник
0

Нет такого способа сделать это, если у вас нет контроля над всем ромом, чтобы настроить его вручную. Я предлагаю вам использовать светло-серый цвет для цвета строки состояния в вашей теме, как это делает Google Диск.

Изменить: обратитесь к ответу @Wrekcker, поскольку это изменилось в android M.

k0sh
источник
1
Он поддерживается в Android M
Amir Dora.
0

Я просто использовал это

  1. Установить родительский стиль
parent="Theme.AppCompat.Light.NoActionBar"
  1. Добавьте это в строку меню в xml
  app:theme="@style/AppThemeWithoutActionBarwithwhitehed"       
  android:background="#fff"
Мохамед Шейкер
источник
-1

Я была такая же проблема.

Я заметил, что когда я использую обычный макет, такой как RelativeLayout, он не работает. Но когда я переключился на эту библиотеку поддержки, такую ​​как CordinatorLayout, она наконец начала работать. Попробуй это.

  <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        tools:context=".Activities.Activity">


        <android.support.v7.widget.Toolbar
            android:id="@+id/tb_activity"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />


    </android.support.design.widget.CoordinatorLayout>

<********* НИЖЕ ДРУГИХ АТРИБУТОВ ************>

стили

<resources>
<!-- 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>
</style>

<style name="AppTheme.NoActionBar" parent="AppTheme">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

И в манифесте

<activity
            android:name=".Activities.MyActivity"
            android:label="Activity"
            android:theme="@style/AppTheme.NoActionBar">
        </activity>
мурта
источник