Cách ẩn thanh trạng thái trong Android


103

Tôi đã giới thiệu liên kết này . Trong đó nếu người dùng nhấp vào EditText (ví dụ: Tới:) thì lúc đó bàn phím sẽ hiện ra và đồng thời người dùng có thể cuộn để xem tất cả các chế độ xem còn lại (ví dụ: nút soạn, chủ đề, nút gửi) trong màn hình đó. Tương tự trong ứng dụng của tôi, tôi có một hoạt động mà tôi đang có một số tiện ích hoặc chế độ xem. Giả sử nếu người dùng nhấp vào Edittext trong Hoạt động của tôi thì bàn phím sẽ bật ra và tôi có thể cuộn để xem các chế độ xem còn lại. Nhưng nếu tôi cung cấp thuộc tính này android:theme="@android:style/Theme.NoTitleBar.Fullscreen"trong tệp kê khai, tôi không thể cuộn để xem các chế độ xem còn lại nhưng nếu cung cấp thuộc tínhandroid:theme="@android:style/Theme.NoTitleBar"như thế này trong tệp kê khai, tôi có thể cuộn để xem chế độ xem còn lại nhưng có thanh trạng thái trong màn hình đó, ở đây tôi muốn toàn màn hình và ngay cả khi bàn phím bật ra tôi có thể cuộn để xem các chế độ xem còn lại ..? những thay đổi nào tôi phải thực hiện cho điều này ..?


3
@ user448250: Lưu ý rằng bạn không thể ẩn thanh trạng thái trong Android 3.0 và có khả năng là bạn sẽ không thể ẩn thanh trạng thái trong tương lai. Trong Android 3.0, thanh trạng thái chứa các nút QUAY LẠI và TRANG CHỦ, vì vậy thanh trạng thái cần phải luôn sẵn sàng.
CommonsWare

Tôi vừa quản lý để ẩn cả tiêu đề và thanh trạng thái trên trình mô phỏng với 3.0, API cấp 11.
erdomester

Vẫn cho phép toàn màn hình, người dùng thường không muốn nhìn thấy thanh trạng thái khi chơi trò chơi toàn màn hình.
GMsoF

@ user448250 Bạn đã bao giờ phát hiện ra điều này chưa?
Tiago

Hoạt động là gì? Nó có một số tệp xml trong thư mục trang web của bạn?
Nebular Dust

Câu trả lời:


170

Viết điều này trong Hoạt động của bạn

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
}

Kiểm tra Doc tại đây: https://developer.android.com/training/system-ui/status.html

và ứng dụng của bạn sẽ chuyển sang chế độ toàn màn hình. không có thanh trạng thái, không có thanh tiêu đề. :)


29
Lưu ý rằng điều này sẽ không hoạt động nếu lớp cha hoạt động của bạn gọi setContentView trong phương thức onCreate - ứng dụng sẽ thoát với một ngoại lệ.
Ben Clayton

1
@Ron Tôi đang thử nghiệm ở cấp API 8. Có thể hành vi khác ở các cấp khác không?
Ben Clayton

Điều này có hợp lệ cho tất cả các phiên bản từ 2.3.x đến 4.x không?
Kostadin

1
Điều này vẫn ngăn không cho màn hình cuộn khi bàn phím phần mềm đang được hiển thị.
Tiago

2
Sử dụng nó trước khi super.onCreate(savedInstanceState);nó gặp sự cố
David

19
 if (Build.VERSION.SDK_INT < 16) {
   getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
 } else {
     View decorView = getWindow().getDecorView();
      int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
      decorView.setSystemUiVisibility(uiOptions);
      ActionBar actionBar = getActionBar();
      actionBar.hide();
 }

3
Tôi nhận thấy rằng khi tôi sử dụng phương pháp này, hiển thị bàn phím mềm sẽ di chuyển các chế độ xem lên trên editText, thay vì thay đổi kích thước mọi thứ. Làm cách nào để sửa lỗi này?
nhà phát triển android

19

Sử dụng chủ đề "Theme.NoTitleBar.Fullscreen"và thử cài đặt "android:windowSoftInputMode=adjustResize"cho hoạt động trong AndroidManifest.xml.Bạn có thể tìm thấy thông tin chi tiết tại đây .


Với cách làm trên, thanh trạng thái của tôi có thể bị ẩn khi ứng dụng đang chạy toàn màn hình, tuy nhiên, tôi vẫn có thể nhìn thấy thanh trạng thái trong khi vuốt xuống trang. Có cách nào nếu tôi không muốn có thanh trạng thái không?
Hazel Wang

13

Sử dụng mã này để ẩn thanh trạng thái trong ứng dụng của bạn và dễ sử dụng

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

12

Nếu bạn cần điều này trong một hoạt động, bạn phải đặt onCreate, trước setContentView:

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.your_screen);

1
Cách này làm cho bàn phím che trường nhập liệu trong webview.
Allen Vork

@AllenVork có giải pháp nào không?
Ishaan Kumar

12

Thêm cái này vào lớp Hoạt động của bạn

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(
                        WindowManager.LayoutParams.FLAG_FULLSCREEN, 
                        WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);
    // some your code
}

8

Sử dụng cái này cho của bạn Activity.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
}

6
void hideStatusBar() {
        if (Build.VERSION.SDK_INT < 16) {
           getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
        } else {
            View decorView = getWindow().getDecorView();
            int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
            decorView.setSystemUiVisibility(uiOptions);
        }
    }

Bạn có thể sử dụng phương pháp này để ẩn thanh trạng thái. Và điều này cũng quan trọng để ẩn thanh hành động. Trong trường hợp này, bạn có thể getSupportActionBar (). Hide () nếu bạn đã mở rộng hoạt động từ hỗ trợ lib như Appcompat hoặc bạn có thể chỉ cần gọi getActionBar (). Hide () sau phương thức được đề cập ở trên. Cảm ơn


6

Thay đổi chủ đề của ứng dụng trong manifest.xmltệp.

android:theme="@android:style/Theme.Translucent.NoTitleBar"

Điều kỳ lạ là điều này hiển thị một thanh màu cam ở đầu màn hình. Tuy nhiên, thanh thông báo bị ẩn.
Đan Mạch Ashfaq

6

Nếu bạn đang ẩn thanh trạng thái, hãy thực hiện việc này trong onCreate (cho Hoạt động) và onCreateView / onViewCreate (cho Fragment)

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

Và đừng quên xóa cờ khi thoát hoạt động, nếu không bạn sẽ có toàn màn hình trong toàn bộ ứng dụng của mình sau khi truy cập hoạt động này. Để xóa, hãy làm điều này trong onDestroy (cho Hoạt động) hoặc onDestroyView (cho Phân đoạn) của bạn

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)

5

Sử dụng mã này:

requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.youractivityxmlname);

4

Mã này ẩn thanh trạng thái.

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

để ẩn thanh hành động, hãy viết dòng này: -

requestWindowFeature(Window.FEATURE_NO_TITLE);

cả hai dòng có thể được viết chung để ẩn thanh Hành động và thanh trạng thái. tất cả các dòng này phải được viết trước khi setContentViewgọi onCreatephương thức trong phương thức.


Hoạt động đẹp. Cảm ơn!
Joshua Pinter

3

Trong AndroidManifest.xml -> bên trong hoạt động mà bạn muốn sử dụng, hãy thêm thông tin sau:

android:theme="@style/Theme.AppCompat.Light.NoActionBar"
//this is for hiding action bar

và trong MainActivity.java -> bên trong phương thức onCreate (), hãy thêm những thứ sau:

this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//this is for hiding status bar

3

Bạn có thể ẩn bằng cách sử dụng styles.xml

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
<style name="HiddenTitleTheme" parent="AppTheme">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
</style>

chỉ cần gọi điều này trong tệp kê khai của bạn như thế này android:theme="@style/HiddenTitleTheme"


2

Bạn có thể ẩn thanh trạng thái bằng cách đặt màu của nó thành màu chuyển đổi bằng cách sử dụng xml . Thêm mục statusBarColor vào chủ đề hoạt động của bạn:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

xin thêm một số mã giải thích duy nhất câu trả lời được chút bối rối cho người khác
Ram Ghadiyaram

2
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setTheme(R.style.Theme_AppCompat_Light_NoActionBar);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN
    , WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.activity__splash_screen);
}

Mặc dù mã này có thể giải quyết câu hỏi, bao gồm giải thích về cách thức và lý do tại sao điều này giải quyết vấn đề sẽ thực sự giúp cải thiện chất lượng bài đăng của bạn và có thể dẫn đến nhiều phiếu bầu hơn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai, không chỉ người hỏi bây giờ. Vui lòng chỉnh sửa câu trả lời của bạn để thêm giải thích và đưa ra dấu hiệu về những giới hạn và giả định áp dụng.
Dharman

Tôi không có nhiều ý tưởng về AppCompat chính xác là gì, chỉ sử dụng nó. Và ba dòng này đã thực hiện công việc.
user3156040 11/11/19

Đáng tiếc là tài liệu của chính Google, như mọi khi, không chính xác về cách đạt được điều này. Có lẽ họ nên sao chép, dán mã này.
zeeshan


0

Chúng tôi không thể ngăn trạng thái xuất hiện ở chế độ toàn màn hình trong các thiết bị (4.4+) kitkat trở lên, vì vậy hãy thử hack để chặn thanh trạng thái mở rộng.

Giải pháp khá lớn, vì vậy đây là liên kết của SO:

StackOverflow: Ẩn thanh trạng thái trong android 4.4+ hoặc kitkat với Chế độ toàn màn hình


Tôi nghĩ rằng bạn là sai, xin hãy nhìn vào các thông tin chính thức về ẩn thanh trạng thái developer.android.com/training/system-ui/status.html
Jose Ricardo Citerio Alcala

Jose, tôi sẽ kiểm tra thông tin trên liên kết đã cho và sẽ cập nhật câu trả lời nếu cần. Câu hỏi / câu trả lời này đã thêm một năm trước khi không có giải pháp chính thức cho kịch bản này. Có thể có trong bản phát hành tiếp theo hoặc các phiên bản google / android đã thêm API / phương thức tương tự. Nếu họ đã cung cấp giải pháp thì đó là một niềm vui. Cảm ơn!
Jyo các ngửi

0

Giải pháp này phù hợp với tôi :)

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (Build.VERSION.SDK_INT >= 19) {
           getWindow().setFlags(AccessibilityNodeInfoCompat.ACTION_NEXT_HTML_ELEMENT, AccessibilityNodeInfoCompat.ACTION_NEXT_HTML_ELEMENT);
           getWindow().getDecorView().setSystemUiVisibility(3328);
    }else{
           requestWindowFeature(Window.FEATURE_NO_TITLE);
           this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }

    DataBindingUtil.setContentView(this, R.layout.activity_hse_video_details);

0
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);
    } else {
       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();
    }

    setContentView(R.layout.activity_main);

}
...
}

0

Được dùng trong Manifest

android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen"

Có lẽ phụ thuộc vào chủ đề. Trong trường hợp của tôi, một ngoại lệ đã xảy ra: "java.lang.IllegalStateException: Bạn cần sử dụng chủ đề Theme.AppCompat (hoặc hậu duệ) với hoạt động này."
CoolMind

0

Trong res -> giá trị -> styles.xml

Bên trong dán thẻ nội dung kiểu

<item name="android:windowTranslucentStatus" tools:targetApi="kitkat">true</item>

0

Nếu bạn tham khảo Google Documents, bạn có thể sử dụng phương thức này cho android 4.1 trở lên, hãy gọi phương thức này trước setContentView ()

public void hideStatusBar() {
    View view = getWindow().getDecorView();
    int uiOption = View.SYSTEM_UI_FLAG_FULLSCREEN;
    view.setSystemUiVisibility(uiOption);
    ActionBar actionBar = getActionBar();
    if (actionBar != null) {
        actionBar.hide();
    }
}

-1
requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

Xin chào! Cân nhắc thêm một số nhận xét hoặc lời giải thích bằng lời nói về những gì bạn đang làm.
George
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.