วิธีซ่อนแถบสถานะใน Android


103

ฉันอ้างถึงลิงก์นี้ ในกรณีนี้หากผู้ใช้คลิกที่ EditText (เช่น To:) ในขณะนั้นแป้นพิมพ์จะปรากฏขึ้นและในเวลาเดียวกันผู้ใช้สามารถเลื่อนเพื่อดูมุมมองที่เหลือทั้งหมดได้ (เช่น: เขียน, หัวเรื่อง, ปุ่มส่ง) ใน หน้าจอนั้น ในแอปของฉันฉันมีกิจกรรมหนึ่งที่ฉันมีวิดเจ็ตหรือมุมมองบางอย่าง สมมติว่าหากผู้ใช้คลิกแก้ไขข้อความซึ่งอยู่ในกิจกรรมของฉันจากนั้นแป้นพิมพ์จะโผล่ขึ้นมาและฉันสามารถเลื่อนเพื่อดูมุมมองที่เหลือได้ แต่ถ้าฉันให้แอตทริบิวต์นี้android:theme="@android:style/Theme.NoTitleBar.Fullscreen"ในไฟล์ Manifest ฉันไม่สามารถเลื่อนเพื่อดูมุมมองที่เหลือได้ แต่ถ้าให้แอตทริบิวต์android:theme="@android:style/Theme.NoTitleBar"เช่นนี้ในรายการฉันสามารถเลื่อนเพื่อดูมุมมองที่เหลือได้ แต่มีแถบสถานะในหน้าจอนั้นฉันต้องการเต็มหน้าจอที่นี่และแม้ว่าแป้นพิมพ์จะโผล่ออกมาฉันก็สามารถเลื่อนเพื่อดูมุมมองที่เหลือได้ .. ? ฉันต้องเปลี่ยนแปลงอะไรบ้างสำหรับสิ่งนี้ .. ?


3
@ user448250: โปรดทราบว่าคุณไม่สามารถซ่อนแถบสถานะใน Android 3.0 ได้และมีโอกาสดีที่คุณจะไม่สามารถซ่อนแถบสถานะได้ในอนาคต ใน Android 3.0 แถบสถานะจะมีปุ่มย้อนกลับและปุ่ม HOME ดังนั้นแถบสถานะจะต้องพร้อมใช้งานเสมอ
CommonsWare

ฉันเพิ่งจัดการเพื่อซ่อนทั้งชื่อเรื่องและแถบสถานะบนโปรแกรมจำลองด้วย 3.0, API ระดับ 11
erdomester

ควรอนุญาตให้เต็มหน้าจอผู้ใช้มักไม่ต้องการเห็นแถบสถานะเมื่อเล่นเกมแบบเต็มหน้าจอ
GMsoF

@ user448250 คุณเคยพบสิ่งนี้หรือไม่?
Tiago

กิจกรรมคืออะไร? มันเป็นไฟล์ xml ในโฟลเดอร์เว็บไซต์ของคุณหรือไม่?
Nebular Dust

คำตอบ:


171

เขียนสิ่งนี้ในกิจกรรมของคุณ

@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);
}

ตรวจสอบเอกสารที่นี่: https://developer.android.com/training/system-ui/status.html

และแอปของคุณจะแสดงเต็มหน้าจอ ไม่มีแถบสถานะไม่มีแถบหัวเรื่อง :)


29
โปรดทราบว่าสิ่งนี้จะไม่ได้ผลหากกิจกรรมของคุณเรียกใช้ setContentView ในเมธอด onCreate แอปจะปิดโดยมีข้อยกเว้น
Ben Clayton

1
@ ตอนนี้ฉันกำลังทดสอบ API ระดับ 8 เป็นไปได้ไหมที่พฤติกรรมจะแตกต่างจากระดับอื่น
Ben Clayton

ใช้ได้กับทุกเวอร์ชันตั้งแต่ 2.3.x ถึง 4.x หรือไม่
Kostadin

1
ซึ่งยังคงป้องกันไม่ให้หน้าจอเลื่อนเมื่อแป้นพิมพ์ซอฟต์แวร์กำลังแสดง
Tiago

3
ใช้ก่อนsuper.onCreate(savedInstanceState);ถ้ามันพัง
เดวิด

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
ฉันสังเกตเห็นว่าเมื่อฉันใช้วิธีนี้การแสดงซอฟต์คีย์บอร์ดจะย้ายมุมมองที่อยู่เหนือ EditText แทนที่จะปรับขนาดสิ่งต่างๆ ฉันจะแก้ไขปัญหานี้ได้อย่างไร
นักพัฒนา Android

19

ใช้รูปแบบ"Theme.NoTitleBar.Fullscreen"และลองตั้งค่า"android:windowSoftInputMode=adjustResize"สำหรับกิจกรรมในAndroidManifest.xml.คุณสามารถหารายละเอียดที่นี่


ด้วยวิธีการข้างต้นแถบสถานะของฉันสามารถซ่อนได้เมื่อแอปทำงานแบบเต็มหน้าจออย่างไรก็ตามฉันยังคงเห็นแถบสถานะขณะที่ปัดหน้าลง มีวิธีไหมถ้าฉันไม่ต้องการแถบสถานะเลย?
Hazel Wang

14

ใช้รหัสนี้เพื่อซ่อนแถบสถานะในแอปของคุณและใช้งานง่าย

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

12

หากคุณต้องการสิ่งนี้ในกิจกรรมเดียวคุณต้องใส่ onCreate ก่อน setContentView:

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

setContentView(R.layout.your_screen);

1
วิธีนี้ทำให้แป้นพิมพ์ครอบคลุมช่องป้อนข้อมูลใน webview
Allen Vork

@AllenVork โซลูชันใด ๆ ?
Ishaan Kumar

12

เพิ่มสิ่งนี้ในชั้นเรียนกิจกรรมของคุณ

@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

ใช้สิ่งนี้สำหรับ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);
        }
    }

คุณสามารถใช้วิธีนี้เพื่อซ่อนแถบสถานะ และนี่เป็นสิ่งสำคัญในการซ่อนแถบการทำงานด้วย ในกรณีนี้คุณสามารถgetSupportActionBar () ซ่อน ()หากคุณได้ขยายกิจกรรมจากการสนับสนุน lib เช่น Appcompat หรือคุณสามารถเรียกgetActionBar () ซ่อน ()หลังจากวิธีการที่กล่าวถึงข้างต้น ขอบคุณ


6

เปลี่ยนธีมของแอปพลิเคชันในmanifest.xmlไฟล์

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

แปลกมากที่นี่แสดงแถบสีส้มที่ด้านบนของหน้าจอ แถบการแจ้งเตือนถูกซ่อนไว้
Danish Ashfaq

6

หากคุณซ่อนแถบสถานะให้ทำสิ่งนี้ใน onCreate (สำหรับกิจกรรม) และ onCreateView / onViewCreated (สำหรับ Fragment)

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

และอย่าลืมล้างค่าสถานะเมื่อออกจากกิจกรรมมิฉะนั้นคุณจะมีเต็มหน้าจอในแอปทั้งหมดหลังจากเยี่ยมชมกิจกรรมนี้ หากต้องการล้างให้ทำใน onDestroy (สำหรับกิจกรรม) หรือ onDestroyView (สำหรับ Fragment)

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


4

รหัสนี้ซ่อนแถบสถานะ

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

เพื่อซ่อนแถบการดำเนินการให้เขียนบรรทัดนี้: -

requestWindowFeature(Window.FEATURE_NO_TITLE);

ทั้งสองบรรทัดสามารถเขียนรวมกันเพื่อซ่อนแถบการดำเนินการและแถบสถานะ ต้องเขียนบรรทัดเหล่านี้ทั้งหมดก่อนsetContentViewการเรียกonCreateใช้เมธอด


ทำงานได้อย่างสวยงาม ขอบคุณ!
Joshua Pinter

3

ใน AndroidManifest.xml -> ภายในกิจกรรมที่คุณต้องการใช้ให้เพิ่มสิ่งต่อไปนี้:

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

และใน MainActivity.java -> ภายใน onCreate () วิธีการเพิ่มสิ่งต่อไปนี้:

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

3

คุณสามารถซ่อนโดยใช้ 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>

เพียงเรียกสิ่งนี้ในรายการของคุณเช่นนี้ android:theme="@style/HiddenTitleTheme"


3

คุณสามารถซ่อนแถบสถานะโดยการตั้งค่าของสีเพื่อ TRANSPERANT ใช้XML เพิ่มรายการstatusBarColorในธีมกิจกรรมของคุณ:

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

กรุณาเพิ่มรหัสคำอธิบายบางคำตอบเท่านั้นที่ทำให้คนอื่นสับสน
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);
}

แม้ว่ารหัสนี้จะช่วยแก้ปัญหาได้รวมถึงคำอธิบายว่าทำไมจึงแก้ปัญหานี้ได้จะช่วยปรับปรุงคุณภาพของโพสต์ของคุณได้อย่างแท้จริงและอาจส่งผลให้มีการโหวตเพิ่มขึ้น จำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตไม่ใช่แค่คนที่ถามตอนนี้ โปรดแก้ไขคำตอบของคุณเพื่อเพิ่มคำอธิบายและระบุข้อ จำกัด และสมมติฐานที่ใช้
ธรรม

ฉันไม่ได้มีความคิดมากนักว่า AppCompat คืออะไรเพียงแค่ใช้มัน และสามบรรทัดนี้ได้ผล
user3156040

ที่น่าเสียดายคือเอกสารของ Google เองเช่นเคยไม่ถูกต้องในการบรรลุเป้าหมายนี้ บางทีพวกเขาควรคัดลอกและวางรหัสนี้
zeeshan


0

เราไม่สามารถป้องกันไม่ให้สถานะปรากฏในโหมดเต็มหน้าจอใน (4.4+) คิทแคทหรืออุปกรณ์ที่สูงกว่าได้ดังนั้นลองแฮ็คเพื่อบล็อกแถบสถานะไม่ให้ขยาย

โซลูชันค่อนข้างใหญ่ดังนั้นนี่คือลิงค์ของ SO:

StackOverflow: ซ่อนแถบสถานะใน Android 4.4+ หรือ kitkat พร้อมเต็มหน้าจอ


ฉันคิดว่าคุณคิดผิดโปรดดูข้อมูลอย่างเป็นทางการเกี่ยวกับการซ่อนนักพัฒนา
android.com/training/system-ui/status.html

Jose ฉันจะตรวจสอบข้อมูลในลิงค์ที่ระบุและจะอัปเดตคำตอบหากจำเป็น คำถาม / คำตอบนี้เพิ่มเมื่อปีที่แล้วเมื่อยังไม่มีคำตอบอย่างเป็นทางการสำหรับสถานการณ์นี้ อาจอยู่ในรุ่นถัดไปหรือรุ่นที่ google / android ได้เพิ่ม API / วิธีการเดียวกัน หากพวกเขาให้การแก้ปัญหาแล้วก็เป็นเรื่องน่ายินดี ขอบคุณ!
Jyo the Whiff

0

วิธีนี้ใช้ได้ผลสำหรับฉัน :)

@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

ใช้ใน Manifest

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

อาจขึ้นอยู่กับธีม ในกรณีของฉันเกิดข้อยกเว้น: "java.lang.IllegalStateException: คุณต้องใช้ธีม Theme.AppCompat (หรือลูกหลาน) กับกิจกรรมนี้"
CoolMind

0

ภายใต้ res -> values ​​-> styles.xml

ด้านในวางแท็กเนื้อหาสไตล์

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

0

หากคุณอ้างถึงGoogle Documentsคุณสามารถใช้วิธีนี้สำหรับ Android 4.1 ขึ้นไปให้เรียกใช้วิธีนี้ก่อน 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);

สวัสดี! ลองเพิ่มความคิดเห็นหรือคำอธิบายด้วยวาจาเกี่ยวกับสิ่งที่คุณกำลังทำ
George
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.