Yöntem 1:
Tamamen şeffaf bir durum çubuğu elde etmek için statusBarColor
, yalnızca API 21 ve sonraki sürümlerde bulunan kullanmanız gerekir. windowTranslucentStatus
API 19 ve sonraki sürümlerde kullanılabilir, ancak durum çubuğu için renkli bir arka plan ekler. Ancak, ayar saydam olarak windowTranslucentStatus
değiştirmenin yapmadığı bir şeyi statusBarColor
başarır: SYSTEM_UI_FLAG_LAYOUT_STABLE
ve SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
işaretlerini ayarlar . Aynı etkiyi elde etmenin en kolay yolu, Android düzen sistemi tarafından dayatılan ekleri etkili bir şekilde devre dışı bırakan ve sizi kendinize karşı savunmaya bırakan bu bayrakları manuel olarak ayarlamaktır.
Bu satırı onCreate
yönteminizde çağırırsınız :
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
Saydamlığı /res/values-v21/styles.xml dosyasında da ayarladığınızdan emin olun:
<item name="android:statusBarColor">@android:color/transparent</item>
Veya saydamlığı programlı olarak ayarlayın:
getWindow().setStatusBarColor(Color.TRANSPARENT);
Bu yaklaşımın iyi yanı, aynı mizanpajların ve tasarımların, renkli yarı saydam durum çubuğu için şeffaf durum çubuğunu alıp API 19'da da kullanılabilmesidir.
<item name="android:windowTranslucentStatus">true</item>
Yöntem # 2:
Durum çubuğunuzun altında yalnızca bir arka plan görüntüsü çizmeniz gerekiyorsa, bunun yerine bir görünüm yerleştirmek yerine, bu işlem etkinliğinizin temasının arka planını istediğiniz görüntüye ayarlayıp durum çubuğu saydamlığını yöntem # 'de gösterildiği gibi ayarlayarak yapılabilir. 1. Birkaç ay önceki Android Police makalesi için ekran görüntüsü oluşturmak için kullandığım yöntem buydu .
Yöntem # 3:
Bazı mizanpajların standart sistem eklerini diğerlerinde çalışmaya devam ederken göz ardı etmek zorunda kalırsanız, bunu yapmanın tek uygun yolu sık bağlantılı ScrimInsetsFrameLayout
sınıfla çalışmaktır. Tabii ki, o sınıfta yapılan bazı şeyler tüm senaryolar için gerekli değildir. Örneğin, sentetik durum çubuğu kaplamasını kullanmayı planlamıyorsanız, init()
yöntemdeki her şeyi açıklayın ve attrs.xml dosyasına hiçbir şey eklemeyi zahmet etmeyin. Bu yaklaşımın işe yaradığını gördüm, ancak bence bu, etrafta dolaşmak için çok fazla iş olabilecek başka bazı etkiler getirdiğini göreceksiniz.
Ayrıca, birden fazla mizanpajı sarmaya karşı olduğunuzu gördüm. Her ikisinin de match_parent
yükseklik ve genişliğe sahip olduğu bir yerleşimi diğerinin içine sarmak durumunda , performans sonuçları endişelenmek için çok önemsizdir. Ne olursa olsun, bu durumu tamamen genişlettiği sınıfı FrameLayout
istediğiniz başka bir Layout sınıfına değiştirerek önleyebilirsiniz . Sadece iyi çalışır.
android:fitsSystemWindows="true"