Durum çubuğunu gizleme

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:

sistem çubukları

Şekil 1. Görünür durum çubuğu.

Ş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.

sistem çubukları

2. Şekil. Gizli durum çubuğu.

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ığında onCreate() ç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ız onResume() veya onWindowFocusChanged() 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.