2016-04-01 16 views
2

Android'de durum çubuğu için rengi nasıl ayarlayabilirim?Android'de statusbar için rengi nasıl ayarlayabilirim

İkisi de styles.xml dosyasında ve .java dosyasında denedim. Aradım

if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP) { 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
     getWindow().setStatusBarColor(getResources().getColor(Color.DKGRAY)); 
    } 

ben istisna olarak alıyorum .java sınıfta kod aşağıdaki çalışırsanız

: -ResourceNotFoundException

04-01 18:55:21.616: E/AndroidRuntime(2169): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.cz/com.myapp.casenotez.updateCase}: android.content.res.Resources$NotFoundException: Resource ID #0xff444444 
04-01 18:55:21.616: E/AndroidRuntime(2169):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
04-01 18:55:21.616: E/AndroidRuntime(2169):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
04-01 18:55:21.616: E/AndroidRuntime(2169):  at android.app.ActivityThread.-wrap11(ActivityThread.java) 
04-01 18:55:21.616: E/AndroidRuntime(2169):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
04-01 18:55:21.616: E/AndroidRuntime(2169):  at android.os.Handler.dispatchMessage(Handler.java:102) 
04-01 18:55:21.616: E/AndroidRuntime(2169):  at android.os.Looper.loop(Looper.java:148) 
04-01 18:55:21.616: E/AndroidRuntime(2169):  at android.app.ActivityThread.main(ActivityThread.java:5417) 
04-01 18:55:21.616: E/AndroidRuntime(2169):  at java.lang.reflect.Method.invoke(Native Method) 
04-01 18:55:21.616: E/AndroidRuntime(2169): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
04-01 18:55:21.616: E/AndroidRuntime(2169): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
04-01 18:55:21.616: E/AndroidRuntime(2169): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0xff444444 
04-01 18:55:21.616: E/AndroidRuntime(2169): at android.content.res.Resources.getValue(Resources.java:1351) 
04-01 18:55:21.616: E/AndroidRuntime(2169): at android.content.res.Resources.getColor(Resources.java:963) 
04-01 18:55:21.616: E/AndroidRuntime(2169): at android.content.res.Resources.getColor(Resources.java:936) 
04-01 18:55:21.616: E/AndroidRuntime(2169): at com.myapp.cz.updateCase.onCreate(updateCase.java:112) 
04-01 18:55:21.616: E/AndroidRuntime(2169): at android.app.Activity.performCreate(Activity.java:6237) 
04-01 18:55:21.616: E/AndroidRuntime(2169): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
04-01 18:55:21.616: E/AndroidRuntime(2169): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
04-01 18:55:21.616: E/AndroidRuntime(2169): ... 9 more 

Ve ayrıca styles.xml içinde stilleri ekleyerek çalıştı: -

Zaten düzgün bir şekilde oluşturulmuş bir renk int olan
+0

Kontrol dışarı bu http:

And, you will need to include a check like this to verify 

bu sadece Lollipop (API 21) veya daha üzerinde çalışırken yürütür // stackoverflow.com/a/27093330/4790490 – Hearty

+1

"getResources(). getColor (Color.DKGRAY)) 'ı çağırmanız gerektiğini sanmıyorum' 'Color.DKGRAY'ı geçebilirsiniz. Hata, "Resource ID # 0xff444444" yi almaya çalıştığını söylüyor ancak bu koyu bir koyu gri renk için onaltılık bir değer. –

cevap

4

. Sen sadece şöyle bir renk kaynak kimliği çözme ediyorsanız yalnızca Resources.getColor() kullanmak gerekir

getWindow().setStatusBarColor(Color.DKGRAY); 

kullanabilirsiniz: Bu durumda

<resources> 
    <color name="dark_gray">#ff444444</color> 
</resources> 

getWindow().setBackgroundColor(getResources.getColor(R.color.dark_gray)); 

, R.color.dark_gray bir renk int değil, bir olduğunu kaynak kimliği Aradaki fark bu.

kolaylıkla yerine tema durum çubuğu rengini ayarlayabilirsiniz

DÜZENLEME. Sadece Lollipop ve üstü üzerinde etkili olduğunu unutmayın. KitKat'ta saydam durum çubuğunu kullanabilirsiniz. Bu şekilde yaparsanız, pencere bayrakları ayarlamak için herhangi bir java koduna ihtiyacınız yoktur.

AppCompat kütüphanesini kullandığınızı kabul ediyorum. Eğer yapmıyorsan, muhtemelen yapmalısın. res/değerleri/styles.xml içinde

: res

<!-- Extend from any AppCompat theme --> 
<style name="AppTheme" parent="Theme.AppCompat"> 
    <!-- put your theme customizations in here --> 
</style> 

<style name="AppTheme.TranslucentStatus" /> 

/değerler-19/styles.xml: res/değerler-21/styles.xml içinde

<style name="AppTheme.TranslucentStatus"> 
    <item name="android:windowTranslucentStatus">true</item> 
</style> 

:

<style name="AppTheme.TranslucentStatus"> 
    <item name="android:statusBarColor">#ff444444</item> 
</style> 

Yarı saydam durum çubuğuna sahip olması gereken Faaliyetler üzerinde AppTheme.TranslucentStatus kullanın.

+0

OKT .. Teşekkürler .. :) Ve style.xml'de durum çubuğu rengini ayarlamak mümkün mü? Sorduğum yukarıdaki kodda ... Sadece durum çubuğunun değil, durum çubuğunun metinlerinin rengini değiştiriyor. – Karan

+0

@Karan Benim görüşüme bak – Karakuri

1

Bu yöntem API Düzey 21'de kullanılabilir, bu nedenle Hedef Çerçevesi ayarının proje seçenekleri içinde yapılandırıldığı şekilde numarasını kontrol etmek isteyebilirsiniz.

   if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) 
       { 
        Window.ClearFlags(WindowManagerFlags.TranslucentStatus); 
        Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds); 
        Window.SetStatusBarColor(Android.Graphics.Color.Blue); 
       } 

Yoksa bu işlevi deneyebilirsiniz ...

public void setStatusBarColor(@ColorRes int statusBarColor) { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    int color = ContextCompat.getColor(this, statusBarColor); 

    Window window = getWindow(); 
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
    window.setStatusBarColor(color); 
    } 
} 
+0

OKay .. Teşekkürler .. :) Ve style.xml içinde durum çubuğu rengini ayarlamak mümkün mü? Sorduğum yukarıdaki kodda ... Sadece durum çubuğunun değil, durum çubuğunun metinlerinin rengini değiştiriyor. – Karan

İlgili konular