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?
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:
@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ę ):
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}.
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.
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.
Odpowiedzi:
Dzięki Androidowi M (poziom api 23) możesz to osiągnąć z motywu z
android:windowLightStatusBar
atrybutem.Edytować :
Tak jak wspomniał Pdroid, można to również osiągnąć programowo:
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
źródło
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
colorPrimary
biały lub programowo:getWindow().setStatusBarColor(Color.WHITE);
źródło
SDK >= 23
ale @being_sohelkhan z jakiegoś powodu został stworzony mój oryginalny odpowiedź ... stackoverflow.com/posts/46897243/revisionsWł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 }
źródło
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}.
źródło
Możesz to wykorzystać w Kotlinie
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
Pamiętaj, aby zadzwonić
onCreate()
wcześniejsetContentView()
źródło
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.
źródło
Właśnie tego użyłem
parent="Theme.AppCompat.Light.NoActionBar"
app:theme="@style/AppThemeWithoutActionBarwithwhitehed" android:background="#fff"
źródło
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>
źródło