กิจกรรมเต็มหน้าจอใน Android?


606

ฉันจะสร้างกิจกรรมแบบเต็มหน้าจอได้อย่างไร ฉันหมายถึงไม่มีแถบการแจ้งเตือน ความคิดใด ๆ

คำตอบ:


1052

คุณสามารถทำได้โดยทางโปรแกรม:

public class ActivityName extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // remove title
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.main);
    }
}

หรือคุณสามารถทำได้ผ่านAndroidManifest.xmlไฟล์ของคุณ:

<activity android:name=".ActivityName"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>

แก้ไข:

หากคุณใช้ AppCompatActivity คุณต้องเพิ่มธีมใหม่

<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=".ActivityName"
    android:label="@string/app_name"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen"/>

ขอบคุณhttps://stackoverflow.com/a/25365193/1646479


65
เพียง android: theme = "@ android: style / Theme.NoTitleBar.Fullscreen" แอตทริบิวต์ในกิจกรรมของคุณในรายการก็พอ ขอบคุณ :)
Praveen

19
หากแอปของคุณใช้ชุดรูปแบบอื่นให้ใช้ชื่อชุดรูปแบบที่สอดคล้องกันเช่นชุดรูปแบบสีขาว @android:style/Theme.Holo.Light.NoActionBar.Fullscreen
ankitjaininfo

5
การตั้งค่าชุดรูปแบบในรายการทำให้หน้าจอเป็นสีดำเมื่อเปิดใช้จะเป็นการดีที่จะทำในรหัส
aurelien_lepage

4
ถ้าคุณใช้ ActionBar และไม่ต้องการ TitleBar ลบบรรทัด `requestWindowFeature () 'เนื่องจากจะทำให้ NullPointer เป็นอย่างอื่น
X.X_Mass_Developer

3
หากคุณกำลังใช้AppCompatActivityคุณจะต้องใส่ก่อนrequestWindowFeature super.onCreateมิฉะนั้นคุณจะได้รับ:android.util.AndroidRuntimeException: requestFeature() must be called before adding content
สลาฟ

128

มีเทคนิคที่เรียกว่าเป็นImmersive โหมดเต็มหน้าจอที่มีอยู่ในKitKat การสาธิตโหมดเต็มหน้าจอแบบสมจริง

ตัวอย่าง


5
เพียงจำไว้ว่า "ฟองเตือนความจำ" จะปรากฏขึ้นในครั้งแรกที่แอปของคุณเข้าสู่โหมดสมจริง นี่เป็นสิ่งที่ดีสำหรับบางกิจกรรม แต่ไม่ใช่ถ้าคุณกำลังทำหน้าจอสแปลช
LarsH

หยุดพักเมื่อใช้สปินเนอร์
ViVekH

ต้องการซ่อนเฉพาะแถบนำทางด้านล่างไม่ใช่แถบสถานะ เป็นไปได้ไหมที่จะทำ?
PvDev

76

หากคุณไม่ต้องการที่จะใช้ชุดรูปแบบเพราะคุณอยู่แล้วโดยใช้รูปแบบของคุณเองคุณสามารถใช้@android:style/Theme.NoTitleBar.Fullscreenandroid:windowFullscreen

ใน AndroidManifest.xml:

<activity
  android:name=".ui.activity.MyActivity"
  android:theme="@style/MyTheme">
</activity>

ใน styles.xml:

<style name="MyTheme"  parent="your parent theme">
  <item name="android:windowNoTitle">true</item>
  <item name="android:windowFullscreen">true</item> 
</style>

เพิ่ม parent เป็นธีมหลักของคุณ
Saurabh Bhandari

คุณต้องวาง <item name = "windowActionBar"> false </item> ด้วย
htafoya

52

ในไฟล์AndroidManifest.xml :

<activity
    android:name=".Launch"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > <!-- This line is important -->

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>  

หรือในรหัสJava :

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

2
คุณต้องเพิ่มรหัสเพื่อทำสิ่งนั้นโดยทางโปรแกรมใน JAVA
ดร. aNdRO

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

ต้องการซ่อนเฉพาะแถบนำทางด้านล่างไม่ใช่แถบสถานะ เป็นไปได้ไหมที่จะทำ?
PvDev


24

ระวังด้วย

requestWindowFeature(Window.FEATURE_NO_TITLE);

หากคุณใช้วิธีการใด ๆ เพื่อตั้งค่าแถบการกระทำดังต่อไปนี้:

getSupportActionBar().setHomeButtonEnabled(true);

มันจะทำให้เกิดข้อยกเว้นตัวชี้โมฆะ


เหตุผลก็เพราะคุณกำลังปรับแถบการกระทำซึ่งรหัสการปรับขนาดพยายามซ่อน!
Andy

22

ลองนี้กับ AppCompat style.xmlจาก มันให้การสนับสนุนแพลตฟอร์มทั้งหมด

<!-- Application theme. -->
<style name="AppTheme.FullScreen" parent="AppTheme">
    <item name="android:windowFullscreen">true</item>
</style>


<!-- Application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar" />

ทางออกที่ดีและง่าย สำหรับมือใหม่เพิ่มชุดรูปแบบนี้ในแท็กกิจกรรมหรือแอปพลิเคชันใน AndroidManifest.xml: android: theme = "@ style / AppTheme.FullScreen"
Leos Literak

1
ต้องการซ่อนเฉพาะแถบนำทางด้านล่างไม่ใช่แถบสถานะ เป็นไปได้ไหมที่จะทำ?
PvDev

13

การใช้ Android Studio (รุ่นปัจจุบันคือ 2.2.2 ในขณะนี้) เป็นเรื่องง่ายมากที่จะเพิ่มกิจกรรมแบบเต็มหน้าจอ

ดูขั้นตอน:

  1. คลิกขวาบนแพ็คเกจหลักของจาวา> เลือก“ ใหม่”> เลือก“ กิจกรรม”> จากนั้นคลิกที่“ กิจกรรมเต็มหน้าจอ”

ขั้นตอนแรก

  1. ปรับแต่งกิจกรรม (“ ชื่อกิจกรรม”,“ ชื่อเลย์เอาต์” และอื่น ๆ ) และคลิก“ เสร็จสิ้น”

ขั้นตอนที่สอง

ทำ!

ตอนนี้คุณมีการทำกิจกรรมเต็มหน้าจอได้อย่างง่ายดาย (ดูคลาส java และโครงร่างกิจกรรมเพื่อทราบวิธีการทำงานของสิ่งต่าง ๆ )!


8

สำหรับผู้ที่ใช้ AppCompact ... style.xml

 <style name="Xlogo" parent="Theme.AppCompat.DayNight.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
</style>

จากนั้นใส่ชื่อในรายการของคุณ ...


7

ก่อนอื่นคุณต้องตั้งค่าธีมของแอพด้วย "NoActionBar" เช่นด้านล่าง

<!-- Application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar" />

จากนั้นเพิ่มบรรทัดเหล่านี้ในกิจกรรมเต็มหน้าจอของคุณ

public class MainActiviy extends AppCompatActivity {
    @Override
    public 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.main);
    }
}

มันจะซ่อนแถบเครื่องมือ / แถบเครื่องมือและแถบสถานะในกิจกรรมเต็มหน้าจอของคุณ


7

AndroidManifest.xml

<activity ...
          android:theme="@style/FullScreenTheme"
    >
</activity>

I. แอปหลักของคุณคือชุดรูปแบบTheme.AppCompat.Light.DarkActionBar

สำหรับซ่อน ActionBar / StatusBar
style.xml

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

<style name="FullScreenTheme" parent="AppTheme">
    <!--this property will help hide the ActionBar-->
    <item name="windowNoTitle">true</item>
    <!--currently, I don't know why we need this property since use windowNoTitle only already help hide actionbar. I use it because it is used inside Theme.AppCompat.Light.NoActionBar (you can check Theme.AppCompat.Light.NoActionBar code). I think there are some missing case that I don't know-->
    <item name="windowActionBar">false</item>
    <!--this property is used for hiding StatusBar-->
    <item name="android:windowFullscreen">true</item>
</style>

เพื่อซ่อนแถบนำทางของระบบ

public class MainActivity extends AppCompatActivity {

    protected void onCreate(Bundle savedInstanceState) {
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
        setContentView(R.layout.activity_main)
        ...
    }
 }

ครั้งที่สอง ธีมแอพหลักของคุณคือTheme.AppCompat.Light.NoActionBar

สำหรับซ่อน ActionBar / StatusBar
style.xml

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

<style name="FullScreenTheme" parent="AppTheme">
    <!--don't need any config for hide ActionBar because our apptheme is NoActionBar-->
    <!--this property is use for hide StatusBar-->
    <item name="android:windowFullscreen">true</item> // 
</style>

เพื่อซ่อนแถบนำทางของระบบ

ที่คล้ายกันTheme.AppCompat.Light.DarkActionBarเช่น

การสาธิต


ขอบคุณ ผ่านการทดสอบบน Android 5.0.1
CoolMind

@CoolMind พบคุณอีกครั้ง ขอบคุณสำหรับการเผยแพร่ของคุณ
ฟาน Van Linh

6

ขอบคุณสำหรับคำตอบ @Cristian ฉันได้รับข้อผิดพลาด

android.util.AndroidRuntimeException: requestFeature () ต้องถูกเรียกก่อนเพิ่มเนื้อหา

ฉันแก้ไขโดยใช้นี้

@Override
protected void onCreate(Bundle savedInstanceState) {

    requestWindowFeature(Window.FEATURE_NO_TITLE);

    super.onCreate(savedInstanceState);

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

    setContentView(R.layout.activity_login);

    -----
    -----
}

เราควรตั้งค่าrequestWindowFeature(Window.FEATURE_NO_TITLE);ก่อนหน้านี้super.onCreate(savedInstanceState);หรือไม่
CoolMind

4

แสดงเต็มรูปแบบ Immersive:

private void askForFullScreen()
    {
        getActivity().getWindow().getDecorView().setSystemUiVisibility(
                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 // hide nav bar
                        | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
                        | View.SYSTEM_UI_FLAG_IMMERSIVE);
    }

ย้ายออกจากโหมดเต็มรูปแบบ:

 private void moveOutOfFullScreen() {
        getActivity().getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    }

3

ฉันต้องการใช้ธีมของตัวเองแทนการใช้ @android: style / Theme.NoTitleBar.Fullscreen แต่มันก็ไม่ได้ผลเหมือนที่โพสต์ในที่นี้ได้กล่าวถึงดังนั้นฉันจึงได้ปรับแต่งเพื่อให้เข้าใจได้

ใน AndroidManifest.xml:

<activity
    android:name=".ui.activity.MyActivity"
    android:theme="@style/MyTheme">
</activity>

ใน styles.xml:

<style name="MyTheme">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
</style>

หมายเหตุ: ในกรณีของฉันฉันต้องใช้name="windowActionBar"แทนname="android:windowActionBar"ก่อนที่มันจะทำงานได้อย่างถูกต้อง ดังนั้นฉันจึงใช้ทั้งคู่เพื่อให้แน่ใจว่าในกรณีที่ฉันต้องพอร์ตไปเป็น Android เวอร์ชันใหม่ในภายหลัง


3

นี่คือตัวอย่างรหัส คุณสามารถเปิด / ปิดธงเพื่อซ่อน / แสดงชิ้นส่วนเฉพาะ

ป้อนคำอธิบายรูปภาพที่นี่

public static void hideSystemUI(Activity activity) {
    View decorView = activity.getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    //| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    //| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
                    | View.SYSTEM_UI_FLAG_IMMERSIVE);
}

จากนั้นคุณรีเซ็ตเป็นสถานะเริ่มต้น :

ป้อนคำอธิบายรูปภาพที่นี่

public static void showSystemUI(Activity activity) {
    View decorView = activity.getWindow().getDecorView();
    decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}

คุณสามารถเรียกฟังก์ชั่นด้านบนได้จากonCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.course_activity);
    UiUtils.hideSystemUI(this);
}

3

Kotlin

การติดตาม google doc มีวิธีที่ง่าย:

override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus) hideSystemUI() }


private fun hideSystemUI() {
// Enables regular immersive mode.
// For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
// Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE
        // Set the content to appear under the system bars so that the
        // content doesn't resize when the system bars hide and show.
        or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        // Hide the nav bar and status bar
        or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        or View.SYSTEM_UI_FLAG_FULLSCREEN)      }


// Shows the system bars by removing all the flags
// except for the ones that make the content appear under the system bars.
private fun showSystemUI() {
window.decorView.systemUiVisibility = 
(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)       }

Google Docs


2

เคล็ดลับ: การใช้ getWindow () setLayout () สามารถทำให้การแสดงผลเต็มหน้าจอของคุณเต็ม! หมายเหตุเอกสารประกอบสำหรับวิธีนี้พูดว่า:

ตั้งค่าพารามิเตอร์เลย์เอาต์ความกว้างและความสูงของหน้าต่าง ... คุณสามารถเปลี่ยนเป็น ... เป็นค่าสัมบูรณ์เพื่อสร้างหน้าต่างที่ไม่ใช่แบบเต็มหน้าจอ

http://developer.android.com/reference/android/view/Window.html#setLayout%28int,%20int%29

สำหรับวัตถุประสงค์ของฉันฉันพบว่าฉันต้องใช้ setLayout พร้อมพารามิเตอร์สัมบูรณ์เพื่อปรับขนาดหน้าต่างเต็มหน้าจออย่างถูกต้อง ส่วนใหญ่แล้วนี่ใช้งานได้ดี มันถูกเรียกโดยเหตุการณ์ onConfigurationChanged () อย่างไรก็ตามมีอาการสะอึก หากผู้ใช้ออกจากแอปเปลี่ยนการวางแนวและป้อนใหม่ก็จะนำไปสู่การปิดโค้ดของฉันซึ่งรวมถึง setLayout () ระหว่างหน้าต่างเวลาเข้าใหม่แถบสถานะของฉัน (ซึ่งถูกซ่อนไว้โดยรายการ) จะถูกทำให้ปรากฏขึ้นอีกครั้ง แต่ในเวลาอื่น setLayout () จะไม่ทำให้สิ่งนี้เกิดขึ้น! วิธีแก้ไขคือการเพิ่มการเรียก setLayout () เพิ่มเติมหลังจากการโทรด้วยค่าฮาร์ดเช่น:

       public static void setSize( final int width, final int height ){
//DO SOME OTHER STUFF...
            instance_.getWindow().setLayout( width, height );
            // Prevent status bar re-appearance
            Handler delay = new Handler();
            delay.postDelayed( new Runnable(){ public void run() {
                instance_.getWindow().setLayout(
                    WindowManager.LayoutParams.FILL_PARENT,
                    WindowManager.LayoutParams.FILL_PARENT );
            }}, FILL_PARENT_ON_RESIZE_DELAY_MILLIS );
        }

จากนั้นหน้าต่างจะปรับขนาดให้ถูกต้องและแถบสถานะไม่ปรากฏขึ้นอีกครั้งโดยไม่คำนึงถึงเหตุการณ์ที่เกิดขึ้น


2
 @Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    adjustFullScreen(newConfig);
}

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        adjustFullScreen(getResources().getConfiguration());
    }
}
private void adjustFullScreen(Configuration config) {
    final View decorView = getWindow().getDecorView();
    if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        decorView.setSystemUiVisibility(
                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
                        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    } else {
        decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
    }
}

2

Inside styles.xml ...

<!-- No action bar -->
<style name="NoActonBar" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Theme customization. -->
    <item name="colorPrimary">#000</item>
    <item name="colorPrimaryDark">#444</item>
    <item name="colorAccent">#999</item>
    <item name="android:windowFullscreen">true</item>
</style>

สิ่งนี้ใช้ได้สำหรับฉัน หวังว่ามันจะช่วยคุณ


2

ด้วย kotlin นี่เป็นวิธีที่ฉันทำ:

class LoginActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)
        window.decorView.systemUiVisibility =
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
                View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
                View.SYSTEM_UI_FLAG_FULLSCREEN

    }
}

โหมดดื่มด่ำ

โหมดดื่มด่ำมีไว้สำหรับแอพที่ผู้ใช้จะต้องโต้ตอบกับหน้าจอเป็นอย่างมาก ตัวอย่างเช่นเกมดูภาพในแกลเลอรี่หรืออ่านเนื้อหาที่แยกหน้าเช่นหนังสือหรือสไลด์ในงานนำเสนอ สำหรับสิ่งนี้เพียงเพิ่มบรรทัดนี้:

View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

เหนียวแน่นดื่มด่ำ

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

View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

สำหรับข้อมูลเพิ่มเติม: เปิดใช้งานโหมดเต็มหน้าจอ

ในกรณีที่คุณใช้แป้นพิมพ์บางครั้งก็เกิดขึ้นที่ StatusBar แสดงเมื่อแป้นพิมพ์ปรากฏขึ้น ในกรณีนั้นฉันมักจะเพิ่มสิ่งนี้ลงใน xml สไตล์ของฉัน

styles.xml

<style name="FullScreen" parent="AppTheme">
    <item name="android:windowFullscreen">true</item>
</style>

และยังบรรทัดนี้เพื่อการแสดงออกของฉัน

<activity
        android:name=".ui.login.LoginActivity"
        android:label="@string/title_activity_login"
        android:theme="@style/FullScreen">

ขอบคุณ ต้องใช้ API 16 และ 19
CoolMind

2

เพียงวางรหัสนี้ในonCreate()วิธีการ

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

1

มันใช้งานได้สำหรับฉัน

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

1
ในที่อื่นควรใช้สิ่งต่อไปนี้ดีกว่า: getWindow (). getDecorView (). setSystemUiVisibility (View.SYSTEM_UI_FLAG_FULLSCREEN);
Protonflux

1
 protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_splash_screen);
    getSupportActionBar().hide();

}

1

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

    <style name="FullscreenTheme" parent="AppTheme">
    <item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="android:windowBackground">@null</item>
    <item name="metaButtonBarStyle">?android:attr/buttonBarStyle</item>
    <item name="metaButtonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
</style>

นี่คือไฟล์รายการของฉัน

<activity
        android:name=".Splash"
        android:screenOrientation="landscape"
        android:configChanges="orientation|keyboard|keyboardHidden|screenLayout|screenSize"
        android:label="@string/app_name"
        android:theme="@style/SplashTheme">

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".MainActivity"
        android:configChanges="orientation|keyboard|keyboardHidden|screenLayout|screenSize"
        android:screenOrientation="landscape"
        android:label="@string/app_name"
        android:theme="@style/FullscreenTheme">
    </activity>

นี่คือกิจกรรมที่สแลงของฉัน

public class Splash extends Activity {
/** Duration of wait **/
private final int SPLASH_DISPLAY_LENGTH = 2000;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.splash_creen);

    /* New Handler to start the Menu-Activity
     * and close this Splash-Screen after some seconds.*/
    new Handler().postDelayed(new Runnable(){
        @Override
        public void run() {
            /* Create an Intent that will start the Menu-Activity. */
            Intent mainIntent = new Intent(Splash.this,MainActivity.class);
            Splash.this.startActivity(mainIntent);
            Splash.this.finish();
        }
    }, SPLASH_DISPLAY_LENGTH);
}

}

และนี่คือกิจกรรมเต็มหน้าจอหลักของฉัน วิธีการ onSystemUiVisibilityChange thi จะปิดที่สำคัญแถบนำทางหลัก Android มิฉะนั้นหลังจากการโทรจะอยู่และจะไม่หายไปอีกต่อไป ปัญหาที่น่ารำคาญจริง ๆ แต่ฟังก์ชั่นนี้แก้ปัญหานั้นได้

MainActivity ระดับสาธารณะขยาย AppCompatActivity {

private View mContentView;
@Override
public void onResume(){
    super.onResume();

    mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

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

    setContentView(R.layout.fullscreen2);
    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null)
    {
        actionBar.hide();
    }
    mContentView = findViewById(R.id.fullscreen_content_text);
    mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);



    View decorView = getWindow().getDecorView();
    decorView.setOnSystemUiVisibilityChangeListener
            (new View.OnSystemUiVisibilityChangeListener()
            {
                @Override
                public void onSystemUiVisibilityChange(int visibility)
                {
                    System.out.println("print");

                    if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0)
                    {
                        mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
                                | View.SYSTEM_UI_FLAG_FULLSCREEN
                                | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
                    }
                    else
                    {

                        mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
                                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

                        }
                }
            });

}

}

นี่คือเค้าโครงหน้าจอสแปลชของฉัน:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ImageView android:id="@+id/splashscreen" android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:background="@android:color/white"
        android:src="@drawable/splash"
        android:layout_gravity="center"/>
    <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Hello World, splash"/>
</LinearLayout>

This is my fullscreen layout
    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#0099cc"
        >
        <TextView
            android:id="@+id/fullscreen_content_text"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:keepScreenOn="true"
            android:text="@string/dummy_content2"
            android:textColor="#33b5e5"
            android:textSize="50sp"
            android:textStyle="bold" />

    </FrameLayout>

ฉันหวังว่านี่จะช่วยคุณได้


1

https://developer.android.com/training/system-ui/immersive.html

กิจกรรม:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        decorView.setSystemUiVisibility(
                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
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    }
}

AndroidManifests:

 <activity android:name=".LoginActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:label="@string/title_activity_login"
            android:theme="@style/FullscreenTheme"
            ></activity>

1

onCreateสร้างกิจกรรมที่ว่างเปล่าและเพิ่มสองบรรทัดใน

public class MainActivity extends AppCompatActivity {

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

        // full screen activity
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getSupportActionBar().hide();

        setContentView(R.layout.activity_main);
    }
    ...
}

1

ใช้วิธีการนี้หลังจาก setContentView ใน onCreate () และผ่านหน้าต่างวัตถุโดยGetWindow ()

    public void makeActivityFullScreen(Window window){
    View decorView = window.getDecorView();
    //        int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
       window.getAttributes().layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
    }
    decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
    );
}

รหัสนี้จะใช้งานได้กับหน้าจอบาก ในการตรวจสอบรอยเต็มหน้าจอคุณต้องใช้ Android P แต่ถ้าคุณมีโทรศัพท์ที่แสดงรอยแล้วไปที่การตั้งค่า -> การตั้งค่าการแสดงผล -> อัตราส่วนการแสดงผลแอป ---> เลือกแอปของคุณ ---> จะมีสองตัวเลือกที่ปลอดภัย จอแสดงผลและเต็มหน้าจอโปรดเลือกเต็มหน้าจอและเรียกใช้แอปคุณสามารถดูเต็มหน้าจอในรอยโดยไม่ต้องมี Android พาย


1

ในการทำให้กิจกรรมเต็มหน้าจอให้ทำดังนี้

    // add following lines before setContentView
    // to hide toolbar
                if(getSupportActionBar()!=null)
                    getSupportActionBar().hide();
    //to hide status bar
                getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);

จะเป็นการซ่อนแถบเครื่องมือและแถบสถานะ

แต่ในบางกรณีคุณอาจต้องการแสดงแถบสถานะที่มีพื้นหลังโปร่งใสในกรณีนี้ให้ทำดังนี้

// add following lines before setContentView
// to hide toolbar
if(getSupportActionBar()!=null)
   getSupportActionBar().hide();
// to make status bar transparent
getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

มีทางเลือกอื่นเพื่อซ่อนแถบเครื่องมือแทน getSupportActionBar().hide():

  1. ลบแถบเครื่องมือโดยเปลี่ยนพาเรนต์ของธีมของแอพ:

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">

  1. หากคุณต้องการลบแถบเครื่องมือออกจากกิจกรรมเดียวให้ไปที่รายการภายใต้แท็กกิจกรรมเพิ่มสิ่งนี้: android:theme="@style/Theme.AppCompat.Light.NoActionBar"

สำหรับคนรัก kotlinทำไมไม่ใช้ฟังก์ชั่นเสริม:

สำหรับกรณีแรก:

fun AppCompatActivity.makeItFullScreenStatusBarVisible(){
    supportActionBar?.hide()
    window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
}

และเรียกสิ่งนี้มาก่อนsetContentView:

makeItFullScreenStatusBarVisible()

สำหรับคนที่สอง:

fun AppCompatActivity.makeItFullScreenStatusBarHidden(){
    supportActionBar?.hide()
    window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)
}

และเรียกมันก่อนsetContentView:

makeItFullScreenStatusBarHidden()

0

ใน Android 10 ไม่มีใครทำงานให้ฉัน

แต่ฉันว่าทำงานได้อย่างสมบูรณ์แบบ (บรรทัดแรกใน oncreate):

    View decorView = getWindow().getDecorView();
    int uiOptions = View.SYSTEM_UI_FLAG_IMMERSIVE;
    decorView.setSystemUiVisibility(uiOptions);

    setContentView(....);

    if (getSupportActionBar() != null) {
        getSupportActionBar().hide();
    }

สนุก :)


0

เพื่อแสดงเนื้อหาผ่านช่องหรือรอยตัด สิ่งนี้สามารถช่วยได้จากเอกสาร:

LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES - เนื้อหาแสดงผลในพื้นที่คัตเอาท์ทั้งในโหมดแนวตั้งและแนวนอน

สิ่งสำคัญสำหรับฉันคือบรรทัดนี้ในรูปแบบกิจกรรม:

// Important to draw through the cutouts
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item> 

สำหรับฉันฉันต้องการที่จะแสดงภาพในโหมดดื่มด่ำ เมื่อฉันคลิกฉันต้องการให้ระบบ UI (สถานะ & แถบการนำทาง) ปรากฏขึ้น

นี่คือทางออกของฉัน:

1- ในกิจกรรมบางวิธีในการแสดง / ซ่อน UI ของระบบ (แถบสถานะ / แถบนำทาง)

private fun hideSystemUI() {
    sysUIHidden = true
    window.decorView.systemUiVisibility = (
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            or View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
            // Hide the nav bar and status bar
            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // Hide nav bar
            or View.SYSTEM_UI_FLAG_FULLSCREEN // Hide status bar
            )
}


private fun showSystemUI() {
    sysUIHidden = false
    window.decorView.systemUiVisibility = (
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            // Set the content to appear under the system bars so that the
            // content doesn't resize when the system bars hide and show.
            or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION // layout Behind nav bar
            or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN // layout Behind status bar
            )
}

2- ตรวจสอบให้แน่ใจว่าสิ่งนี้ในมุมมองรูทของโครงร่าง xml ของคุณ

android:fitsSystemWindows="false"

3- สไตล์สำหรับกิจกรรมเต็มหน้าจอจะให้สถานะ / แถบนำทางเป็นพื้นหลังกึ่งโปร่งใสเมื่อปรากฏขึ้น:

<style name="FullscreenTheme" parent="AppTheme">
    <item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="android:windowBackground">@null</item>
    <item name="metaButtonBarStyle">?android:attr/buttonBarStyle</item>
    <item name="metaButtonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
    <item name="android:statusBarColor">#50000000</item>
    <item name="android:navigationBarColor">#50000000</item>
    // Important to draw behind cutouts
    <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item> 
</style>

<style name="FullscreenActionBarStyle" parent="Widget.AppCompat.ActionBar">
    <item name="android:background">@color/sysTransparent</item>
</style>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.