Bu derste, Android'in farklı sürümlerinde durum çubuğunun nasıl gizleneceği açıklanmaktadır. Durum çubuğunu (ve isteğe bağlı olarak gezinme çubuğunu) gizlemek, içeriğin daha fazla görüntüleme alanı kullanmasına olanak tanıyarak daha etkileyici bir kullanıcı deneyimi sağlar.
Şekil 1'de görünür bir durum çubuğu olan bir uygulama gösterilmiştir:
Şekil 2'de, gizli durum çubuğu olan bir uygulama gösterilmiştir. İşlem çubuğunun gizlendiğini de unutmayın. Durum çubuğu olmadan işlem çubuğunu hiçbir zaman göstermemelisiniz.
Android 4.0 ve Alt Sürümlerde Durum Çubuğunu Gizle
WindowManager
işaretlerini ayarlayarak Android 4.0 (API düzeyi 14) ve önceki sürümlerde durum çubuğunu gizleyebilirsiniz. Bunu programatik olarak veya uygulamanızın manifest dosyasında bir etkinlik teması ayarlayarak yapabilirsiniz. Durum çubuğunun uygulamanızda her zaman gizli kalması gerekiyorsa uygulamanızın manifest dosyasında bir etkinlik teması ayarlamak tercih edilen yaklaşımdır (kesinlikle konuşmak gerekirse isterseniz temayı programatik olarak geçersiz kılabilirsiniz). Örneğin:
<application ... android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" > ... </application>
Etkinlik teması kullanmanın avantajları şunlardır:
- Programlı bir işaret ayarlamaktan daha kolaydır ve hataya daha az açıktır.
- Sistem, uygulamanızın ana etkinliğini örneklendirmeden önce kullanıcı arayüzünüzü oluşturmak için ihtiyaç duyduğu bilgilere sahip olduğundan daha sorunsuz kullanıcı arayüzü geçişleri elde edersiniz.
Alternatif olarak, WindowManager
işaretlerini programatik olarak ayarlayabilirsiniz.
Bu yaklaşım, kullanıcı uygulamanızla etkileşimde bulunurken durum çubuğunu gizlemeyi ve göstermeyi kolaylaştırır:
Kotlin
class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // If the Android version is lower than Jellybean, use this call to hide // the status bar. if (Build.VERSION.SDK_INT < 16) { window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN) } setContentView(R.layout.activity_main) } ... }
Java
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // If the Android version is lower than Jellybean, use this call to hide // the status bar. if (Build.VERSION.SDK_INT < 16) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } setContentView(R.layout.activity_main); } ... }
WindowManager
işaretleri ayarladığınızda (bir etkinlik teması aracılığıyla veya programatik olarak olsun), uygulamanız bunları temizlemediği sürece işaretler etkin kalır.
Etkinlik düzeninizi, FLAG_FULLSCREEN
özelliğini etkinleştirdiğinizde kullanılabilen ekran alanını kullanacak şekilde ayarlamak için FLAG_LAYOUT_IN_SCREEN
kullanabilirsiniz. Bu, durum çubuğu gizlenip gösterildiğinde içeriğinizin yeniden boyutlandırılmasını önler.
Android 4.1 ve sonraki sürümlerde Durum Çubuğunu gizleme
Android 4.1 (API düzeyi 16) ve sonraki sürümlerde durum çubuğunu setSystemUiVisibility()
kullanarak gizleyebilirsiniz.
setSystemUiVisibility()
, kullanıcı arayüzü işaretlerini bağımsız görünüm düzeyinde ayarlar. Bu ayarlar pencere düzeyinde toplanır. Kullanıcı arayüzü bayraklarını ayarlamak için setSystemUiVisibility()
kullanmak, sistem çubukları üzerinde WindowManager
işaretlerini kullanmaya kıyasla daha ayrıntılı kontrol sağlar. Bu snippet, durum çubuğunu gizler:
Kotlin
// Hide the status bar. window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN // Remember that you should never show the action bar if the // status bar is hidden, so hide that too if necessary. actionBar?.hide()
Java
View decorView = getWindow().getDecorView(); // Hide the status bar. int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); // Remember that you should never show the action bar if the // status bar is hidden, so hide that too if necessary. ActionBar actionBar = getActionBar(); actionBar.hide();
Aşağıdakileri göz önünde bulundurun:
- Kullanıcı arayüzü işaretleri temizlendikten sonra (örneğin, etkinlikten ayrılarak) çubukları tekrar gizlemek isterseniz uygulamanızın bunları sıfırlaması gerekir. Uygulamanızın uygun şekilde yanıt verebilmesi için kullanıcı arayüzü görünürlüğü değişikliklerini nasıl dinleyeceğinizi öğrenmek için Kullanıcı Arayüzü Görünürlüğü Değişikliklerine Yanıt Verme bölümüne bakın.
- Kullanıcı arayüzü işaretlerini ayarladığınız yerler bir fark yaratır. Etkinliğinizin
onCreate()
yönteminde sistem çubuklarını gizlerseniz ve kullanıcı Ana Ekran'a basarsa sistem çubukları yeniden görünür. Kullanıcı etkinliği yeniden açtığındaonCreate()
çağrılmayacağı için sistem çubukları görünür durumda kalır. Sistem kullanıcı arayüzü değişikliklerinin, kullanıcı etkinliğinize girerken ve etkinliğinizden ayrılırken kalıcı olmasını istiyorsanızonResume()
veyaonWindowFocusChanged()
içinde kullanıcı arayüzü işaretleri ayarlayın. setSystemUiVisibility()
yöntemi yalnızca bu yöntemi çağırdığınız görünüm görünürse etkili olur.- Görünümden çıkılması,
setSystemUiVisibility()
ile ayarlanan işaretlerin temizlenmesine neden olur.
İçeriğin Durum Çubuğunun Arkasında Görünmesini Sağlama
Android 4.1 ve sonraki sürümlerde, uygulamanızın içeriğini durum çubuğunun arkasında görünecek şekilde ayarlayabilirsiniz. Böylece, durum çubuğu gizlenip gösterilirken içerik yeniden boyutlandırılmaz.
Bunun için SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
kullanabilirsiniz.
Uygulamanızın kararlı bir düzende kalmasına yardımcı olmak için SYSTEM_UI_FLAG_LAYOUT_STABLE
de kullanmanız gerekebilir.
Bu yaklaşımı kullandığınızda, uygulamanızın kullanıcı arayüzünün önemli parçalarının (örneğin, Haritalar uygulamasındaki yerleşik denetimler) sistem çubuklarının üzerini kapatmamasını sağlamak sizin sorumluluğunuzda olur. Bu durum uygulamanızı kullanılamaz hale getirebilir. Çoğu durumda bu sorunu, XML düzen dosyanıza true
değerine ayarlanmış android:fitsSystemWindows
özelliğini ekleyerek düzeltebilirsiniz. Bu işlem, üst ViewGroup
öğesinin dolgusunu sistem pencereleri için yer bırakacak şekilde ayarlar. Bu, çoğu uygulama için yeterlidir.
Bununla birlikte, bazı durumlarda, varsayılan dolguyu değiştirerek uygulamanız için istediğiniz düzeni elde etmeniz gerekebilir. İçeriğinizin sistem çubuklarına (pencerenin "içerik ekleri" olarak bilinen bir alanı kaplar) göre nasıl görüneceğini doğrudan değiştirmek için fitSystemWindows(Rect insets)
değerini geçersiz kılın.
fitSystemWindows()
yöntemi, bir pencerenin içerik ekleri değiştiğinde pencerenin içeriğini uygun şekilde ayarlaması için görünüm hiyerarşisi tarafından çağrılır. Bu yöntemi geçersiz kılarak giriş öğelerini (ve dolayısıyla uygulamanızın düzenini) istediğiniz gibi işleyebilirsiniz.