Kích hoạt chế độ toàn màn hình
Để loại bỏ thanh trạng thái hệ thống (thanh chứa thông tin pin, sóng mạng, giờ), bạn cần thiết lập các cờ (flags) cho cửa sổ trước khi tiến hành nạp giao diện (layout). Đoạn mã dưới đây nên được đặt trong phương thức onCreate() của Activity, ngay trước lệnh setContentView():
// Thiết lập cờ toàn màn hình để ẩn thanh trạng thái hệ thống
Window window = this.getWindow();
if (window != null) {
window.setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
);
}
// Sau đó mới nạp layout
setContentView(R.layout.activity_main);
Xử lý xung đột giao diện khi ẩn thanh tiêu đề (Action Bar)
Nhiều lập trình viên gặp lỗi khi cố gắng ẩn thanh tiêu đề bằng cách sử dụng requestWindowFeature(Window.FEATURE_NO_TITLE) hoặc áp dụng Theme Theme.NoTitleBar trong Manifest. Nguyên nhân thường gặp là do ứng dụng đang sử dụng thư viện android.support.v7.app.AppCompatActivity (hoặc ActionBarActivity). Thư viện này yêu cầu Theme của Activity phải là một lớp con của Theme.AppCompat. Nếu bạn sử dụng Theme hệ thống cũ như @android:style/Theme.NoTitleBar, ứng dụng sẽ vứt ra ngoại lệ IllegalStateException khi khởi động.
Để giải quyết vấn đề này một cách chính xác, bạn cần tuân thủ các quy tắc của AppCompat. Có hai phương án chính:
1. Khai báo trong tệp styles.xml và AndroidManifest.xml
Thay vì sử dụng Theme mặc định của hệ thống, hãy định nghĩa một Theme AppCompat không có thanh hành động:
<!-- res/values/styles.xml -->
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Tùy chỉnh thêm nếu cần -->
</style>
Sau đó áp dụng Theme này cho Activity cụ thể hoặc toàn bộ ứng dụng trong AndroidManifest.xml:
<activity android:name=".MainActivity"
android:theme="@style/AppTheme.NoActionBar">
<!-- ... -->
</activity>
2. Ẩn bằng lập trình (Programmatic Approach)
Nếu bạn muốn giữ lại AppCompat Theme nhưng cần ẩn thanh Action Bar theo logic runtime (ví dụ: khi vào chế độ toàn màn hình), hãy sử dụng getSupportActionBar(). Đừng sử dụng getActionBar() vì nó sẽ không hoạt động với AppCompatActivity.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Ẩn Action Bar hỗ trợ bởi thư viện v7
if (getSupportActionBar() != null) {
getSupportActionBar().hide();
}
setContentView(R.layout.activity_main);
}