Jak ustawić biały pasek stanu z czarnymi ikonami?

86

Chcę zmienić kolor paska stanu mojej aplikacji, aby był biały z czarnymi ikonami (zamiast domyślnego czarnego z białymi ikonami). Czy jest na to sposób?

Jon
źródło
Zmień domyślny motyw
Rohit5k2
jaki motyw powinienem zmienić, aby zmienić ikony paska powiadomień na czarne?
Jon
Użyj motywu niestandardowego. Aby rozpocząć, zobacz stackoverflow.com/questions/8024706/…
Rohit5k2
A co z aplikacjami, które są zgodne z wytycznymi Androida i mają białe ikony powiadomień, jak oczekujesz, że użytkownik je zobaczy, gdy znajdują się w Twojej aplikacji?
tyczj
2
ale nie możesz zmienić koloru innych zasobów aplikacji, w rzeczywistości Lollipop sprawia, że ​​wszystkie ikony są białe bez względu na wszystko
tyczj

Odpowiedzi:

129

Dzięki Androidowi M (poziom api 23) możesz to osiągnąć z motywu z android:windowLightStatusBaratrybutem.

Edytować :

Tak jak wspomniał Pdroid, można to również osiągnąć programowo:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); 
bugraoral
źródło
2
czy mogę ustawić to programowo?
busylee
@busylee Myślę, że możesz stworzyć dziecko swojego motywu i zmienić je tam i zgłosić za pomocą activity.getTheme.setTo (Theme another)
bugraoral
Cześć @wrecker, mam ten sam problem z ikoną powiadomienia aplikacji. Dodałem android: windowLightStatusBar = true w moim motywie i testuję go w systemie Android M., ale biała ikona powiadomienia nie zmienia się na szarą, gdy zmieniam motyw za pomocą aplikacji uruchamiającej innej firmy (Nova Launcher). Wypróbowałem wszystkie możliwe sposoby, ale jeszcze nie byłem w stanie tego naprawić. Jeśli możesz mi pomóc, będę wdzięczny.
Sujit
1
@busylee Tak, możesz to ustawić w dowolnym momencie za pomocą następującej metody: View.setSystemUiVisibility (View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); Należy dodać do odpowiedzi
Pdroid
6
co jeśli chcę używać w wersji 22 lub wcześniejszych?
Dhara Patel
46

Możliwe jest stworzenie białego paska statusu z szarymi ikonami np. W ten sposób dla SDK> = 23 (zobacz dokumentację ):

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

w pliku styles.xml i ustaw colorPrimarybiały lub programowo:

getWindow().setStatusBarColor(Color.WHITE);
Rammgarot
źródło
2
Został dodany w API 23, a nie 21 - patrz dokumentacja
Vadim Kotov
hej @VadimKotov faktycznie napisałem SDK >= 23ale @being_sohelkhan z jakiegoś powodu został stworzony mój oryginalny odpowiedź ... stackoverflow.com/posts/46897243/revisions
Rammgarot
16

Właśnie dodałem do mojej aktywności na Kotlinie:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                window.decorView.systemUiVisibility =View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
                window.statusBarColor = Color.WHITE
            }
Serg Burlaka
źródło
7

po prostu dodaj to do swojego stylu

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

ustaw android: windowDrawsSystemBarBackgrounds na true * . To jest flaga, której opis znajduje się poniżej:

Flaga wskazująca, czy to okno jest odpowiedzialne za rysowanie tła dla słupków systemowych. Jeśli prawda, a okno nie jest ruchome, paski systemowe są rysowane z przezroczystym tłem, a odpowiednie obszary w tym oknie są wypełnione kolorami określonymi w {@link android.R.attr # statusBarColor} i {@link android.R .attr # navigationBarColor}. Odpowiada {@link android.view.WindowManager.LayoutParams # FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS}.

Ayejuni Ilemobayo Kings
źródło
2

Możesz to wykorzystać w Kotlinie

 window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR

Pamiętaj, aby zadzwonić onCreate()wcześniejsetContentView()

Gastón Saillén
źródło
0

Nie ma takiej drogi, chyba że masz kontrolę nad całym ROMem, aby dostosować to ręcznie. Sugeruję, abyś użył jasnoszarego koloru paska stanu w swoim motywie, tak jak robi to dysk Google.

Edycja: zapoznaj się z odpowiedzią @Wrekcker, ponieważ zmieniło się to w systemie Android M.

k0sh
źródło
1
Jest obsługiwany w systemie Android M
Amir Dora.
0

Właśnie tego użyłem

  1. Ustaw rodzica w stylu
parent="Theme.AppCompat.Light.NoActionBar"
  1. Dodaj to do paska menu w XML
  app:theme="@style/AppThemeWithoutActionBarwithwhitehed"       
  android:background="#fff"
Mohamed Shaker
źródło
-1

Miałem ten sam problem.

Zauważyłem, że kiedy używam normalnego układu, takiego jak RelativeLayout, to nie działa. Ale kiedy przeszedłem na tę bibliotekę wsparcia, taką jak CordinatorLayout, w końcu zaczęło działać. Spróbuj tego.

  <?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>

<********* PONIŻEJ INNYCH ATRYBUTÓW ************>

style

<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" />

I w manifeście

<activity
            android:name=".Activities.MyActivity"
            android:label="Activity"
            android:theme="@style/AppTheme.NoActionBar">
        </activity>
murt
źródło