ธีมแบบเต็มหน้าจอสำหรับ AppCompat


304

ฉันต้องการทราบว่าฉันจะใช้ชุดรูปแบบเต็มหน้าจอ (ไม่มีแถบหัวเรื่อง + ไม่มีแถบเครื่องมือ) กับกิจกรรมได้อย่างไร ฉันใช้ไลบรารี AppCompat จากแพ็คเกจสนับสนุน v7

ฉันพยายามนำไปใช้android:theme="@android:style/Theme.NoTitleBar.Fullscreen"กับกิจกรรมเฉพาะของฉัน แต่มันล้มเหลว ฉันคิดว่าเป็นเพราะธีมแอปพลิเคชันของฉันเป็นเช่นนี้

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

ฉันได้ลองสิ่งนี้แล้ว

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

ซึ่งจะซ่อนแถบชื่อเท่านั้น แต่ไม่ใช่แถบแอ็คชัน วิธีแก้ปัญหาปัจจุบันของฉันคือการซ่อนแถบแอ็คชั่น

getSupportActionBar().hide();

คำตอบ:


836

เมื่อคุณใช้ Theme.AppCompat ในแอปพลิเคชันของคุณคุณสามารถใช้ FullScreenTheme ได้โดยเพิ่มโค้ดด้านล่างลงในสไตล์

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

และพูดถึงในไฟล์รายการของคุณ

<activity
   android:name=".activities.FullViewActivity"
   android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen" 
/>

67
สไตล์ผู้ปกครองควรเป็น "Theme.AppCompat.Light.NoActionBar"
Hover Ruan

3
ที่จริงแล้วมันเพียงพอที่จะเพิ่มสิ่งนี้ลงในไฟล์สไตล์ xml: <item name = "android: windowFullscreen"> จริง </item> ทัศนวิสัยการกระทำบาร์ (แถบชื่อเรื่อง) สามารถควบคุมแยกต่างหากโดยใช้วิธีการ. leather / .show ที่รันไทม์
อามิน

2
FEATURE_NO_TITLE ไม่ได้รับการยกย่อง Dunno ต่างกัน แต่ในที่สุดฉันก็เปลี่ยนกิจกรรมของฉันเพื่อขยายกิจกรรมแทน AppCompatActivity และรหัสเดียวกันของฉันก็ใช้งานได้ (ขอบคุณฉันไม่ต้องการ AppCompat): this.requestWindowFeature (Window.FEATURE_NO_TITLE); getWindow (). getDecorView (). setSystemUiVisibility (View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION)
user888867

แถบสถานะนี้จะซ่อนเช่นกัน :(
ม่า

3
ฉันจะเพิ่มhideNavigation()ในonResume()- หากไม่มีแถบนำทางก็ยังปรากฏให้เห็นในแอปของฉัน (api 18+)
Antek

69

จากคำตอบของ @nebyan ฉันพบว่าแถบแอ็คชันยังไม่ปิดบัง

รหัสต่อไปนี้ใช้งานได้สำหรับฉัน:

<style name="AppFullScreenTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

และแน่นอนอย่าลืมแก้ไขAndroidManifestไฟล์ของคุณ

<activity
    android:name="YOUR_ACTIVITY_NAME"
    android:theme="@style/AppFullScreenTheme" 
/>

@nebyan ทำไมทางออกของคุณไม่ทำงานและอันนี้เหมาะกับฉัน เหตุผลคืออะไร
ahmet

1
ไม่จำเป็นต้องตั้งค่า<item name="android:windowNoTitle">true</item> <item name="android:windowActionBar">false</item>ถ้าธีมของคุณมี.NoActionBar
user924

19
<style name="Theme.AppCompat.Light.NoActionBar" parent="@style/Theme.AppCompat">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
</style>

เมื่อใช้ xml ด้านบนใน style.xml คุณจะสามารถซ่อนชื่อเรื่องและแถบการกระทำได้


12

ปัญหาเกิดขึ้นระหว่างรุ่นก่อนและหลัง Android 4.0 (ระดับ API 14)

จากที่นี่ ฉันสร้างโซลูชันของตัวเอง

@SuppressLint("NewApi")
@Override
protected void onResume()
{
    super.onResume();

    if (Build.VERSION.SDK_INT < 16)
    {
        // Hide the status bar
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        // Hide the action bar
        getSupportActionBar().hide();
    }
    else
    {
        // Hide the status bar
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
        / Hide the action bar
        getActionBar().hide();
    }
}

ฉันเขียนรหัสนี้ในวิธี onResume () เพราะถ้าคุณออกจากแอพแล้วเปิดใหม่อีกครั้งแถบการกระทำจะยังคงทำงานอยู่! (และเพื่อแก้ไขปัญหา)

ฉันหวังว่ามันจะเป็นประโยชน์;)


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

7

"การหลีกเลี่ยงปัญหา" ของคุณ (การซ่อน actionBar ด้วยตัวคุณเอง) เป็นวิธีปกติ แต่ Google แนะนำให้ซ่อนแถบเครื่องมือเสมอเมื่อซ่อนแถบชื่อเรื่องไว้ ดูที่นี่: https://developer.android.com/training/system-ui/status.html


7
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //to remove "information bar" above the action bar
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    //to remove the action bar (title bar)
    getSupportActionBar().hide();
}

5

คุณสามารถทำตามขั้นตอนด้านล่าง: -

AndoridMenifest.xml

<activity
            android:name=".ui.FullImageActivity"
            android:label="@string/title_activity_main"
            android:screenOrientation="landscape"
            android:theme="@style/DialogTheme">
        </activity>

Style.xml

<style name="DialogTheme" parent="android:Theme.Dialog">

    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">fill_parent</item>

   <!-- No backgrounds, titles or window float -->
    <item name="android:windowNoTitle">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>
</style>

FullImageActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    setContentView(R.layout.image_view);
     }

ฉันหวังว่ามันจะช่วย .. ขอบคุณ !!


4

ควรเป็นparent = "@ style / Theme.AppCompat.Light.NoActionBar"

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" 
parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

มีเพียงโซลูชันนี้เท่านั้นที่ซ่อนแถบหัวเรื่องและทำให้เต็มหน้าจอโดยสมบูรณ์ ควรทำเครื่องหมายว่าเป็นทางออกที่ถูกต้อง ขอบคุณ!
Darko Maksimovic

3

ในการซ่อนทั้งแถบสถานะและแถบการกระทำและทำให้กิจกรรมของคุณเต็มหน้าจอให้ใช้รหัสต่อไปนี้ในกิจกรรมonResume()หรือonWindowFocusChanged()วิธีการของคุณ:

@Override
protected void onResume() {
    super.onResume();
    View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN);
}

คุณสามารถค้นหาข้อมูลเพิ่มเติมได้จากลิงค์ต่อไปนี้:

หมายเหตุ:การใช้โซลูชัน xml ที่ให้ไว้ในเธรดนี้ฉันสามารถซ่อนแถบสถานะได้ แต่ไม่สามารถใช้แถบนำทางได้


1
ขอบคุณนี่เป็นสิ่งเดียวที่ซ่อนแถบนำทาง! ขอแนะนำคำตอบนี้
Maharkus


2

ชุดรูปแบบนี้ใช้งานได้หลังจาก API 21 (รวมอยู่เท่านั้น) และทำให้ทั้งแถบสถานะและแถบนำทางมีความโปร่งใส

<style name="TransparentAppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  <item name="windowActionBar">false</item>
  <item name="windowNoTitle">true</item>
  <item name="android:statusBarColor">@android:color/transparent</item>
  <item name="android:windowBackground">@android:color/transparent</item>
  <item name="android:navigationBarColor">@android:color/transparent</item>
  <item name="android:windowIsTranslucent">true</item>
  <item name="android:windowContentOverlay">@null</item>
</style>

1

วิธีลบแถบชื่อเรื่องใน AppCompat:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
    }


0
<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" parent="@style/Theme.AppCompat.Light">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>


1
โปรดอธิบายรหัสด้วยหากคุณให้รหัสนี้จะช่วยให้เข้าใจรหัสของคุณได้และอาจช่วยให้เข้าใจถึงปัญหาในอนาคตได้
Lepidopteron

0

แค่นี้ ?

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen">
    <item name="android:windowFullscreen">true</item>
</style>

0

เพียงแค่ผู้ชายคนนี้ในสไตล์ของคุณ:

<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item> </style>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.