2012-01-28 15 views
14

Chcę zmienić kolor tła paska stanu, pisząc aplikację. Moje urządzenie z Androidem ma czarny kolor, chcę go zmienić na inny kolor. Widziałem tutaj kilka wpisów związanych z tym tematem, ale mówią one o powiadomieniu.Jak zmienić kolor tła paska stanu Android

Jeśli jakieś ciało o tym wie, pomóż mi.

Pasek domyślny stan

enter image description here

Po użyciu rozciągliwej jako tło na pasku stanu

enter image description here

Odpowiedz

12

Niestety, chyba że robisz niestandardowy ROM to nie jest możliwe, chyba że chcesz zmienić tylko pasek stanu dla swojej aplikacji.

To wymagałoby ciężkiej pracy.

Najpierw trzeba będzie dodać Theme.NoTitleBar.Fullscreen do oczywistego

<application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
     > 

Potem raz zrobiliście, że trzeba utworzyć standardowy układ, który reprezentuje pasek stanu, będzie to oznaczać, że masz aby dodać czas, a także otrzymywać wszystkie powiadomienia z innych aplikacji, nie wiem jak to zrobić, ale jestem pewien, że jest sposób.

Jeśli naprawdę chcesz zrobić to dobrze, masz przed sobą trudne chwile.


Niestety, chyba że masz know how budowania niestandardowych ROM nie sądzę, jest to możliwe

11

Jest to możliwe na KitKat i po.

Jeśli chcesz użyć go w aplikacji (jak prosiłeś), można użyć tej biblioteki https://github.com/jgilfelt/SystemBarTint

Wystarczy tylko napisać:

// set a custom tint color for all system bars 
tintManager.setTintColor(Color.parseColor("#99000FF")); 
// set a custom navigation bar resource 
tintManager.setNavigationBarTintResource(R.drawable.my_tint); 
// set a custom status bar drawable 
tintManager.setStatusBarTintDrawable(MyDrawable); 
1

IF chcesz zaktualizować pasek stanu koloru na Lollipop bez uaktualniania ADT i SDK i wszystkich podobnych rzeczy, możesz użyć odbić, aby osiągnąć metody API 21 (Lollipop) i wyższe

w swojej aktywności:

if (Build.VERSION.SDK_INT >= 21) { 
     Window window = getWindow(); 

     // original code, works on Lollipop SDKs 
     // window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
     // window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
     // window.setStatusBarColor(getResources().getColor(YOUR_COLOR)); 

     try { 
      // to work on old SDKs 
      int FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS = 0x80000000; 
      window.addFlags(FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
      window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 

      Class<?> cls = window.getClass(); 
      Method method = cls.getDeclaredMethod("setStatusBarColor", 
        new Class<?>[] { Integer.TYPE }); 

      method.invoke(window, Res.color(theme.statusColor)); 

     } catch (Exception e) { 
      // upgrade your SDK and ADT :D 
     } 

    } 

moja obecna minimalna API jest 15, jeśli nie można znaleźć

WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS 

w swoim SDK, można uzyskać jego wartość od dokumentacji, co zrobiłem z

WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS 

nadziei tym Pomógł

+0

nie działa na 17::

Aby to zrobić programowo to zrobić java.lang.NoSuchMethodException: setStatusBarColor [int] – djdance

7

W stylach.XML to zrobić:

<resources> 
    <!-- Base application theme. --> 
    <style name="AppTheme" parent="Theme.AppCompat.Light"> 
     <item name="colorPrimary">@color/color_primary</item> 
     <item name="colorPrimaryDark">@color/color_secondary</item> 
     <item name="colorAccent">@color/color_accent</item> 
     <!---Below is the code for status bar color------> 
     <item name="android:statusBarColor">@color/color_primary</item> 
    </style> 
</resources> 

miejsce to jest w wartości-V21/styles.xml, aby umożliwić to na lizak i później.

Window window = activity.getWindow(); 
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
window.setStatusBarColor(activity.getResources().getColor(R.color.example_color));` 
Powiązane problemy