Pelajaran ini menjelaskan cara menyembunyikan {i>status bar<i} pada berbagai versi Android. Menyembunyikan bilah status (dan jika perlu, bilah navigasi) memungkinkan konten menggunakan lebih banyak ruang tampilan, sehingga memberikan pengalaman pengguna yang lebih imersif.
Gambar 1 menunjukkan aplikasi dengan status bar yang terlihat:
Gambar 2 menunjukkan aplikasi dengan status bar tersembunyi. Perhatikan bahwa panel tindakan juga tersembunyi. Anda tidak boleh menampilkan panel tindakan tanpa status bar.
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
WindowManager
. Anda dapat melakukannya secara terprogram atau dengan
mengatur tema aktivitas dalam file manifes aplikasi Anda. Menetapkan tema aktivitas di tema aplikasi
{i>Manifest file <i}adalah pendekatan yang lebih disukai jika {i>status bar<i} harus selalu
tersembunyi di aplikasi Anda (walaupun sebenarnya, Anda bisa mengganti secara terprogram
tema jika Anda mau). 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.
- Ini menghasilkan transisi UI yang lebih halus, karena sistem memiliki informasi yang diperlukan untuk merender UI Anda sebelum membuat instance aktivitas utama aplikasi.
Atau, Anda dapat menetapkan tanda WindowManager
secara terprogram.
Pendekatan ini memudahkan penyembunyian dan tampilan status bar saat pengguna berinteraksi
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), flag tetap berlaku kecuali aplikasi Anda menghapusnya.
Anda dapat menggunakan
FLAG_LAYOUT_IN_SCREEN
untuk menyetel tata letak aktivitas agar menggunakan area layar sama dengan yang tersedia saat Anda mengaktifkan
FLAG_FULLSCREEN
. Hal ini mencegah
konten agar tidak diubah ukurannya 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 tinggi dengan
menggunakan setSystemUiVisibility()
.
setSystemUiVisibility()
menetapkan tanda UI pada
tingkat tampilan individual; setelan ini digabungkan ke tingkat jendela. Menggunakan
setSystemUiVisibility()
untuk menetapkan tanda UI
memberi Anda kontrol yang lebih terperinci
atas bilah sistem dibandingkan menggunakan
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 mengatur ulang mereka jika Anda ingin menyembunyikan bilah lagi. Lihat Merespons Perubahan Visibilitas UI untuk diskusi tentang cara memproses perubahan visibilitas UI sehingga aplikasi Anda dapat merespons hal tersebut.
- Tempat Anda menetapkan tanda UI akan membuat perbedaan. Jika Anda menyembunyikan bilah sistem di kolom aktivitas
onCreate()
dan pengguna menekan Home, kolom sistem akan muncul kembali. Saat pengguna membuka kembali aktivitas,onCreate()
tidak akan dipanggil, jadi bilah sistem akan tetap terlihat. Jika Anda ingin perubahan UI sistem tetap ada saat pengguna masuk dan keluar dari aktivitas Anda, setel flag UI dionResume()
atauonWindowFocusChanged()
. - Metode
setSystemUiVisibility()
hanya berpengaruh jika tampilan yang Anda gunakan untuk memanggilnya terlihat. - Keluar dari tampilan menyebabkan flag
ditetapkan dengan
setSystemUiVisibility()
dihapus.
Memunculkan Konten Di Belakang Status Bar
Pada Android 4.1 dan yang lebih tinggi, Anda dapat menyetel konten aplikasi Anda agar muncul di belakang
{i>status bar<i}, sehingga konten tidak berubah
ukuran saat {i>status bar<i} disembunyikan dan ditampilkan.
Untuk melakukannya, gunakan
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
.
Anda mungkin juga
perlu menggunakan
SYSTEM_UI_FLAG_LAYOUT_STABLE
untuk membantu aplikasi Anda mempertahankan
dan tata letak yang stabil.
Ketika Anda menggunakan pendekatan ini, Anda bertanggung jawab untuk memastikan bahwa bagian penting
UI aplikasi Anda (misalnya, kontrol bawaan dalam aplikasi Maps) tidak
ditutupi oleh bilah sistem. Hal ini dapat membuat aplikasi Anda tidak dapat digunakan. Dalam kebanyakan kasus, Anda dapat
tangani ini dengan menambahkan atribut android:fitsSystemWindows
ke file tata letak XML, setel ke
true
. Ini menyesuaikan padding dari ViewGroup
induk
untuk menyisakan ruang
untuk jendela sistem. Langkah ini cukup untuk sebagian besar aplikasi.
Namun, dalam beberapa kasus, Anda mungkin perlu memodifikasi padding default untuk mendapatkan padding
untuk aplikasi Anda. Untuk langsung memanipulasi cara
konten diletakkan relatif terhadap bilah sistem (yang menempati ruang dikenal sebagai
"inset konten"), ganti fitSystemWindows(Rect insets)
.
Metode fitSystemWindows()
dipanggil oleh
hierarki tampilan saat inset konten untuk jendela telah berubah, untuk memungkinkan jendela
menyesuaikan kontennya. Dengan mengganti metode ini, Anda dapat menangani
inset (dan tata letak aplikasi Anda) sesuai keinginan Anda.