+1

Hướng dẫn ẩn thanh Status Bar trong Android

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àm onCreate() 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àm onResume() hoặc onWindowFocusChanged().
  • 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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí