Tutorial ini menjelaskan cara menyembunyikan status bar di berbagai versi Android. Menyembunyikan status bar (dan secara opsional menu navigasi) memungkinkan konten menggunakan lebih banyak ruang tampilan, sehingga memberikan pengalaman pengguna yang lebih imersif.
Gambar 1 menunjukkan aplikasi dengan status bar yang terlihat:
![kolom sistem](https://developer.android.com/static/images/training/status_bar_show.png?authuser=6&hl=id)
Gambar 1. Status bar terlihat.
Gambar 2 menunjukkan aplikasi dengan status bar tersembunyi. Perhatikan bahwa panel tindakan juga tersembunyi. Anda tidak boleh menampilkan panel tindakan tanpa status bar.
![kolom sistem](https://developer.android.com/static/images/training/status_bar_hide.png?authuser=6&hl=id)
Gambar 2. Status bar tersembunyi.
Menyembunyikan Status Bar di Android 4.0 dan yang Lebih Rendah
Anda dapat menyembunyikan status bar di Android 4.0 (API level 14) dan yang lebih rendah dengan menyetel
tanda WindowManager
. Anda dapat melakukannya secara terprogram atau dengan
menyetel tema aktivitas di file manifes aplikasi Anda. Menetapkan tema aktivitas dalam file
manifes aplikasi adalah pendekatan yang lebih disukai jika status bar harus selalu
tersembunyi di aplikasi Anda (meskipun sebenarnya, Anda dapat mengganti tema
secara terprogram jika menginginkannya). Contoh:
<application ... android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" > ... </application>
Keuntungan menggunakan tema aktivitas adalah sebagai berikut:
- Lebih mudah dipertahankan dan lebih tidak rentan error dibandingkan menyetel flag secara terprogram.
- Hal ini menghasilkan transisi UI yang lebih lancar karena sistem memiliki informasi yang diperlukan untuk merender UI sebelum membuat instance aktivitas utama aplikasi.
Atau, Anda dapat menetapkan tanda WindowManager
secara terprogram.
Pendekatan ini mempermudah menyembunyikan dan menampilkan status bar saat pengguna berinteraksi dengan
aplikasi Anda:
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); } ... }
Saat Anda menetapkan tanda WindowManager
(baik melalui tema aktivitas maupun
secara terprogram), tanda tersebut tetap berlaku kecuali aplikasi Anda menghapusnya.
Anda dapat menggunakan
FLAG_LAYOUT_IN_SCREEN
untuk menyetel tata letak aktivitas agar dapat menggunakan area layar yang sama dengan yang tersedia saat Anda mengaktifkan
FLAG_FULLSCREEN
. Hal ini mencegah
konten Anda mengubah ukuran saat status bar disembunyikan dan ditampilkan.
Menyembunyikan Status Bar di Android 4.1 dan yang Lebih Tinggi
Anda dapat menyembunyikan status bar di Android 4.1 (API level 16) dan yang lebih baru menggunakan setSystemUiVisibility()
.
setSystemUiVisibility()
menetapkan tanda UI di
tingkat tampilan individual; setelan ini digabungkan ke tingkat jendela. Menggunakan
setSystemUiVisibility()
untuk menetapkan tanda UI
memberi Anda kontrol yang lebih terperinci pada kolom sistem daripada menggunakan
tanda WindowManager
. Cuplikan ini menyembunyikan status bar:
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();
Perhatikan hal berikut:
- Setelah flag UI dihapus (misalnya, dengan keluar dari aktivitas), aplikasi Anda perlu meresetnya jika Anda ingin menyembunyikan bar lagi. Lihat Merespons Perubahan Visibilitas UI untuk diskusi tentang cara memproses perubahan visibilitas UI sehingga aplikasi Anda dapat merespons.
- Tempat Anda menetapkan tanda UI akan membuat perbedaan. Jika Anda menyembunyikan kolom sistem dalam metode
onCreate()
aktivitas dan pengguna menekan Beranda, kolom sistem akan muncul kembali. Saat pengguna membuka kembali aktivitas,onCreate()
tidak akan dipanggil, sehingga kolom sistem akan tetap terlihat. Jika Anda ingin perubahan UI sistem bertahan saat pengguna masuk dan keluar dari aktivitas, tetapkan flag UI dionResume()
atauonWindowFocusChanged()
. - Metode
setSystemUiVisibility()
hanya berpengaruh jika tampilan yang Anda panggil terlihat. - Keluar dari tampilan menyebabkan flag yang ditetapkan dengan
setSystemUiVisibility()
dihapus.
Memunculkan Konten Di Belakang Status Bar
Pada Android 4.1 dan yang lebih tinggi, Anda dapat menyetel konten aplikasi agar muncul di belakang
status bar, sehingga konten tidak mengubah ukuran saat status bar disembunyikan dan ditampilkan.
Untuk melakukannya, gunakan
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
.
Anda mungkin juga perlu menggunakan
SYSTEM_UI_FLAG_LAYOUT_STABLE
untuk membantu aplikasi mempertahankan
tata letak yang stabil.
Saat menggunakan pendekatan ini, Anda bertanggung jawab untuk memastikan bahwa bagian penting
dari UI aplikasi Anda (misalnya, kontrol bawaan dalam aplikasi Maps) tidak tertutup
oleh kolom sistem. Hal ini dapat membuat aplikasi Anda tidak dapat digunakan. Pada umumnya, Anda dapat
menangani hal ini dengan menambahkan atribut android:fitsSystemWindows
ke file tata letak XML, yang ditetapkan ke
true
. Ini menyesuaikan padding dari ViewGroup
induk
untuk memberikan ruang bagi jendela sistem. Langkah ini cukup untuk sebagian besar aplikasi.
Namun, dalam beberapa kasus, Anda mungkin perlu mengubah padding default guna mendapatkan tata letak yang diinginkan
untuk aplikasi Anda. Untuk memanipulasi langsung cara
tata letak konten Anda relatif terhadap kolom sistem (yang menempati ruang yang dikenal sebagai
"inset konten" jendela), ganti fitSystemWindows(Rect insets)
.
Metode fitSystemWindows()
dipanggil oleh
hierarki tampilan saat inset konten untuk jendela telah berubah, agar jendela dapat
menyesuaikan kontennya. Dengan mengganti metode ini, Anda dapat menangani inset (dan tata letak aplikasi Anda) sesuai keinginan.