Lollipop'taki uygulamaya uyacak şekilde durum çubuğu rengi nasıl değiştirilir? [Android]


96

Yeni lolipop güncellemesinde, yerel Google uygulamalarında durum çubuğunun renginin çalıştırmakta olduğunuz uygulamadaki işlem çubuğuyla eşleşecek şekilde değiştiğini fark ettim. Twitter uygulamasında da görüyorum, bu yüzden bunu yapanın yalnızca Google olmadığını tahmin ediyorum.

Mümkünse bunu nasıl yapacağını bilen var mı?

Yanıtlar:


221

Durum çubuğu rengini değiştirmek için setStatusBarColor (int color) kullanın . Javadoc'a göre, pencereye de bazı bayraklar koymamız gerekiyor.

Çalışma kod pasajı:

Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(ContextCompat.getColor(activity, R.color.example_color));


Unutmayın Malzeme Tasarımı kurallar uyarınca durum çubuğu rengi ve eylem çubuğu rengi farklı olmalıdır:

  • ActionBar birincil 500 rengini kullanmalıdır
  • StatusBar birincil 700 rengini kullanmalıdır

Aşağıdaki ekran görüntüsüne bakın:

görüntü açıklamasını buraya girin


4
Efektin öykünücüde görünmeyebileceğini unutmayın. Örneğin, bu örnek proje bir Nexus 9'daki durum çubuğunu renklendiriyor ancak Android 5.0 öykünücüsünde değil.
CommonsWare

1
@mate: Android SDK öykünücüsünden bahsediyordum. Genymotion üzerinde çalıştığını bilmek güzel.
CommonsWare

3
@Azad Hayır, değil. Yukarıdaki kod parçacığını kullanmak için, cihazınızın API 21 veya daha yüksek bir sürümde çalıştığından emin olmanız gerekir.
klimat

1
Nispeten basit bir proje üzerinde çalışıyorum ve sadece kullandığımı getWindow().setStatusBarColor(activity.getResources().getColor(R.color.example_color));ve mükemmel çalıştığını söylemeliyim . Bayrakların kesinlikle gerekli olduğu bağlamdan emin değilim.
Joaquin Iurchuk

3
Lolipop öncesi cihazlarda da rengi göstermek istiyorum. Nasıl yapılabilir?
WISHY

48

Bunu styles.xml dosyanıza eklemeniz yeterli. ColorPrimary eylem çubuğu içindir ve colorPrimaryDark durum çubuğu içindir.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:colorPrimary">@color/primary</item>
    <item name="android:colorPrimaryDark">@color/primary_dark</item>
</style>

Geliştirici android'in bu resmi, renk paleti hakkında daha fazla bilgi veriyor. Bu bağlantıda daha fazlasını okuyabilirsiniz .

görüntü açıklamasını buraya girin


Android Studio, her proje için şu girişleri oluşturur: <color name="colorPrimary">#somecolor</color>ve <color name="colorPrimaryDark">#somecolor</color>. İstenilen etkiyi elde etmek için değiştirilebilirler.
Nörotransmitter

41

Durum çubuğu rengini ayarlamanın başka bir yolu da style.xml'dir .

Bunu yapmak için res / values-v21 klasörü altında şu içeriğe sahip bir style.xml dosyası oluşturun :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="android:Theme.Material">
        <!--   darker variant for the status bar and contextual app bars -->
        <item name="android:colorPrimaryDark">@color/blue_dark</item>
    </style>
</resources>

Düzenleme: yorumlarda belirtildiği gibi, AppCompat kullanırken kod farklıdır. Res / values ​​/ style.xml dosyasında bunun yerine şunu kullanın:

<style name="Theme.MyTheme" parent="Theme.AppCompat.Light">   
    <!-- Set AppCompat’s color theming attrs -->
    <item name="colorPrimary">@color/my_awesome_red</item>
    <item name="colorPrimaryDark">@color/my_awesome_darker_red</item>
    <!-- Other attributes -->
</style>

1
Bunu yaptım. Ama işe yaramadı. Ama sonra Material yerine AppCompat kullanıyorum.
Martin

3
@Martin Uygulama uyumluluğu için android öneki olmadan colorPrimaryDark kullanın.
Michiel

appcompat için de çalışmıyor (Seviye 18'de test edildi)
Mohammad Zekrallah

Durum çubuğu rengi yalnızca OS API Seviye 21 ve üzeri olan cihazlarda çalışacaktır. Ayrıca, manifestinizde bu stili bireysel aktivitelerde geçersiz kılmadığınızdan emin olun.
Levon

inappbrowser için arama çubuğu renginin uygulama rengiyle aynı şekilde nasıl değiştirileceği
R.Anandan

23

Durum çubuğu rengini ayarlamak için, res / values-v21 klasörü altında şu içeriğe sahip bir style.xml dosyası oluşturun:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="AppBaseTheme" parent="AppTheme">
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@color/blue</item>
    </style>

</resources>

windowDrawsSystemBarBackgrounds sembolünü çözemiyor diyor
jmhostalet

4

İki stil kullanıyorsanız bu satırı v21 stilinde ekleyin.

  <item name="android:statusBarColor">#43434f</item>

Bu bayrak ayarlanmadan çalışmazandroid:windowDrawsSystemBarBackgrounds
Slav

4

Ayrıca status-barfarklı etkinlikler ( parçalar ) için farklı renk istiyorsanız, bunu aşağıdaki adımlarla yapabilirsiniz (API 21 ve üzeri üzerinde çalışın):

Önce values21/style.xmlaşağıdaki kodu oluşturun ve koyun:

 <style name="AIO" parent="AIOBase">
            <item name="android:windowDrawsSystemBarBackgrounds">true</item>
            <item name="android:windowContentTransitions">true</item>
    </style>

Ardından values/style.xmlaşağıdaki gibi Beyaz | Koyu temaları tanımlayın :

 <style name="AIOBase" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_primary_dark</item>
        <item name="colorAccent">@color/color_accent</item>
        <item name="android:textColorPrimary">@android:color/black</item>
        <item name="android:statusBarColor" tools:targetApi="lollipop">@color/color_primary_dark
        </item>
        <item name="android:textColor">@color/gray_darkest</item>
        <item name="android:windowBackground">@color/default_bg</item>
        <item name="android:colorBackground">@color/default_bg</item>
    </style>


    <style name="AIO" parent="AIOBase" />

    <style name="AIO.Dark" parent="AIOBase">
        <item name="android:statusBarColor" tools:targetApi="lollipop">#171717
        </item>
    </style>

    <style name="AIO.White" parent="AIOBase">
        <item name="android:statusBarColor" tools:targetApi="lollipop">#bdbdbd
        </item>
    </style>

Ayrıca manifest.xml.


2

Android Lollipop öncesi cihazlarda bunu SystemBarTintManager'dan yapabilirsiniz. Android stüdyo kullanıyorsanız, gradle dosyanıza Systembartint lib eklemeniz yeterlidir.

dependencies {
    compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
    ...
}

Sonra faaliyetinde

// create manager instance after the content view is set
SystemBarTintManager mTintManager = new SystemBarTintManager(this);
// enable status bar tint
mTintManager.setStatusBarTintEnabled(true);
mTintManager.setTintColor(getResources().getColor(R.color.blue));
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.