Как сделать строку состояния белой с черными значками?
86
Я хочу изменить цвет строки состояния для своего приложения, чтобы он был белым с черными значками (вместо черного по умолчанию с белыми значками). Есть ли способ сделать это?
А как насчет приложений, которые следуют рекомендациям Android и имеют белые значки уведомлений, как вы ожидаете, что пользователь увидит их, когда они находятся в вашем приложении?
tyczj
2
но вы не можете изменить цвет ресурсов других приложений, на самом деле Lollipop делает все значки белыми, несмотря ни на что
tyczj
Ответы:
129
С Android M (уровень API 23) вы можете добиться этого из темы с android:windowLightStatusBarатрибутом.
Редактировать :
Как упоминал Pdroid, это также можно сделать программно:
@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 (см. Документацию ):
Он был добавлен в API 23, а не 21 - см. Документацию
Вадим Котов
эй, @VadimKotov, на самом деле я написал, SDK >= 23но @being_sohelkhan по какой-то причине отредактировал мой исходный ответ ... stackoverflow.com/posts/46897243/revisions
установите android: windowDrawsSystemBarBackgrounds в значение true * . Это флаг, описание которого приведено ниже:
Флаг, указывающий, отвечает ли это Окно за отрисовку фона для системных полос. Если задано значение true и окно не плавающее, системные панели отображаются с прозрачным фоном, а соответствующие области в этом окне заполняются цветами, указанными в {@link android.R.attr # statusBarColor} и {@link android.R .attr # navigationBarColor}. Соответствует {@link android.view.WindowManager.LayoutParams # FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS}.
Нет такого способа сделать это, если у вас нет контроля над всем ромом, чтобы настроить его вручную. Я предлагаю вам использовать светло-серый цвет для цвета строки состояния в вашей теме, как это делает Google Диск.
Изменить: обратитесь к ответу @Wrekcker, поскольку это изменилось в android M.
Я заметил, что когда я использую обычный макет, такой как RelativeLayout, он не работает. Но когда я переключился на эту библиотеку поддержки, такую как CordinatorLayout, она наконец начала работать. Попробуй это.
Ответы:
С Android M (уровень API 23) вы можете добиться этого из темы с
android:windowLightStatusBar
атрибутом.Редактировать :
Как упоминал Pdroid, это также можно сделать программно:
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
источник
Можно сделать белую строку состояния с серыми значками, например, таким образом для SDK> = 23 (см. Документацию ):
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="android:windowLightStatusBar">true</item> </style>
в вашем файле styles.xml и установите
colorPrimary
белый цвет или программно:getWindow().setStatusBarColor(Color.WHITE);
источник
SDK >= 23
но @being_sohelkhan по какой-то причине отредактировал мой исходный ответ ... stackoverflow.com/posts/46897243/revisionsТолько что добавил в мои действия на Котлине:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { window.decorView.systemUiVisibility =View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR window.statusBarColor = Color.WHITE }
источник
просто добавьте это к своему стилю
<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}.
источник
Вы можете использовать это так в Котлине
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
Не забудьте позвонить
onCreate()
передsetContentView()
источник
Нет такого способа сделать это, если у вас нет контроля над всем ромом, чтобы настроить его вручную. Я предлагаю вам использовать светло-серый цвет для цвета строки состояния в вашей теме, как это делает Google Диск.
Изменить: обратитесь к ответу @Wrekcker, поскольку это изменилось в android M.
источник
Я просто использовал это
parent="Theme.AppCompat.Light.NoActionBar"
app:theme="@style/AppThemeWithoutActionBarwithwhitehed" android:background="#fff"
источник
Я была такая же проблема.
Я заметил, что когда я использую обычный макет, такой как 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>
источник