Hướng dẫn ẩn thanh Status Bar trong Android
Bài đăng này đã không được cập nhật trong 7 năm
Trong bài này mình sẽ hướng dẫn các bạn ẩn thanh Status Bar để giúp cho ứng dụng có nhiều không gian để hiển thị hơn.
Từ phiên bản Android 4.0 (API 14) trở về trước
Bạn có thể sử dụng WindowManager
để cài đặt trong code hoặc khai báo activity theme trong file manifest
.
- Bạn nên sử dụng khai báo trong manifest khi biết chắc thanh status bar luôn luôn được ẩn trong ứng dụng. Việc khai báo này sẽ giúp ta dễ dàng quản lý code hơn, đồng thời giúp các hiệu ứng sẽ mượt hơn bởi vì hệ thống đã biết trước thông tin của ứng dụng các thành phần của giao diện trước khi chạy ứng dụng.
<application
...
android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" >
...
</application>
- Ngoài ra, bạn cũng có thể dùng code thông qua
WindowManager
. Phương pháp này sẽ giúp bạn có thể ẩn hiện thành Status Bar trong lúc runtime.
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);
}
...
}
Khi đã set WindowManager
flags (dùng theme hoặc sửa bằng code), thì nhãn này sẽ không thay đổi trừ khi ứng dụng của bạn xoá nó.
Bạn có thể sử dụng FLAG_LAYOUT_IN_SCREEN
để cho layout sử dụng cùng khoảng không gian khi sử dụng FLAG_FULLSCREEN
. Điều này tránh cho việc nội dung bên trong tránh bị thay đổi khi ẩn/hiện Status Bar.
Từ phiên bản Android 4.1 (API 16) về sau
Bạn có thể ẩn thanh Status Bar bằng cách sử dụng setSystemUiVisibility()
:
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();
- Khi UI frags bị xoá, ứng dụng sẽ cần phải reset lại nó khi bạn muốn ẩn lại.
- Nếu bạn ẩn trong hàm
onCreate()
và khi người dùng nhấn phím HomeHome. Thanh Status Bar xuất hiện và khi người dùng trở lại app, hàmonCreate()
sẽ không được gọi lại nữa và thanh Status Bar sẽ không bị mất đi. Vì thế ta nên đặt trong hàmonResume()
hoặconWindowFocusChanged()
. - Method
setSystemUiVisibility()
chỉ hoạt động khi bạn gọi trong một view đang ở trạng thái visible. - Khi bạn chuyển ra khỏi view mà được set frags này thì
setSystemUiVisibility()
sẽ bị xoá.
Bài viết được dịch từ: https://developer.android.com/training/system-ui/status.html#behind
All rights reserved