Aktivitas Layar Penuh di Android?

Jawaban:

1052

Anda dapat melakukannya secara terprogram:

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

Atau Anda dapat melakukannya melalui AndroidManifest.xmlfile Anda :

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

Edit:

Jika Anda menggunakan AppCompatActivity maka Anda perlu menambahkan tema baru

<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>

dan kemudian menggunakannya.

<activity android:name=".ActivityName"
    android:label="@string/app_name"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen"/>

Terima kasih kepada https://stackoverflow.com/a/25365193/1646479

Cristian
sumber
65
atribut just android: theme = "@ android: style / Theme.NoTitleBar.Fullscreen" pada aktivitas Anda di manifes sudah cukup. Terima kasih :)
Praveen
19
Jika aplikasi Anda menggunakan tema lain gunakan nama tema yang sesuai Eg untuk tema Putih @android:style/Theme.Holo.Light.NoActionBar.Fullscreen
ankitjaininfo
5
Atur tema dalam manifes layar hitam saat peluncuran, lebih baik melakukannya dalam kode.
aurelien_lepage
4
jika Anda menggunakan ActionBar dan hanya ingin tidak ada TitleBar menghapus baris `requestWindowFeature () 'karena ini akan menyebabkan NullPointer sebaliknya
X.X_Mass_Developer
3
Jika Anda menggunakan AppCompatActivity, Anda harus meletakkan requestWindowFeaturesebelumnya super.onCreate. Jika tidak, Anda akan mendapatkan:android.util.AndroidRuntimeException: requestFeature() must be called before adding content
Slav
128

Ada teknik yang disebut Mode Layar Penuh Immersive yang tersedia di KitKat . Demo Mode Layar Penuh Immersive

Contoh

Dmide
sumber
5
Ingatlah bahwa "gelembung pengingat" akan ditampilkan saat pertama kali aplikasi Anda memasuki mode immersive. Ini bagus untuk beberapa kegiatan, tetapi tidak jika Anda melakukan splash screen, misalnya.
LarsH
istirahat saat menggunakan pemintal
ViVekH
hanya ingin menyembunyikan bilah navigasi bawah bukan bilah status. Apakah mungkin untuk dilakukan?
PvDev
76

Jika Anda tidak ingin menggunakan tema @android:style/Theme.NoTitleBar.Fullscreenkarena Anda sudah menggunakan tema sendiri, Anda dapat menggunakannya android:windowFullscreen.

Di AndroidManifest.xml:

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

Di styles.xml:

<style name="MyTheme"  parent="your parent theme">
  <item name="android:windowNoTitle">true</item>
  <item name="android:windowFullscreen">true</item> 
</style>
Ariel Cabib
sumber
tambahkan orangtua sebagai tema orang tua Anda
Saurabh Bhandari
Anda perlu menempatkan <item name = "windowActionBar"> false </item> juga
htafoya
52

Dalam file 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>  

Atau dalam kode Java :

protected void onCreate(Bundle savedInstanceState){
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
iNFInite PosSibiLitiEs
sumber
2
Anda harus menambahkan kode untuk melakukan hal itu secara terprogram di JAWA
Dr. aNdRO
2
requestWindowFeature (Window.FEATURE_NO_TITLE); getWindow (). setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
iNFInite PosSibiLitiEs
hanya ingin menyembunyikan bilah navigasi bawah bukan bilah status. Apakah mungkin untuk dilakukan?
PvDev
32

Jika Anda menggunakan AppCompat dan ActionBarActivity, gunakan ini

getSupportActionBar().hide();

Bala Wisnu
sumber
Ini tidak akan menghapus bilah status di atas
Manohar Reddy
24

Hati-hati dengan

requestWindowFeature(Window.FEATURE_NO_TITLE);

Jika Anda menggunakan metode apa pun untuk mengatur bilah tindakan sebagai berikut:

getSupportActionBar().setHomeButtonEnabled(true);

Ini akan menyebabkan pengecualian null pointer.

jiahao
sumber
Alasannya adalah karena Anda menyesuaikan bilah tindakan, yang berusaha disembunyikan oleh kode pengubahan ukuran!
Andy
22

Coba ini dengan appcompat dari style.xml. Ini memberikan dukungan untuk semua platform.

<!-- 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" />
Rohit Suthar
sumber
solusi yang bagus dan mudah. Untuk pemula, tambahkan tema ini di tag Aktivitas atau Aplikasi di AndroidManifest.xml: android: theme = "@ style / AppTheme.FullScreen"
Leos Literak
1
hanya ingin menyembunyikan bilah navigasi bawah bukan bilah status. Apakah mungkin untuk dilakukan?
PvDev
13

Menggunakan Android Studio (versi saat ini 2.2.2 saat ini) sangat mudah untuk menambahkan aktivitas layar penuh.

Lihat langkah-langkahnya:

  1. Klik kanan pada paket utama java Anda> Pilih "Baru"> Pilih "Aktivitas"> Lalu, klik "Aktivitas Layar Penuh".

Langkah pertama

  1. Kustomisasi aktivitas ("Nama Kegiatan", "Nama Tata Letak" dan sebagainya) dan klik "selesai".

Langkah dua

Selesai!

Sekarang Anda memiliki aktivitas layar penuh yang dibuat dengan mudah (lihat kelas java dan tata letak aktivitas untuk mengetahui cara kerjanya)!

Filipe Brito
sumber
8

Bagi mereka yang menggunakan AppCompact ... style.xml

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

Kemudian letakkan nama itu di manifes Anda ...

X-Hitam ...
sumber
7

Pertama, Anda harus mengatur tema aplikasi Anda dengan "NoActionBar" seperti di bawah ini

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

Kemudian tambahkan baris ini dalam aktivitas layar penuh Anda.

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

Ini akan menyembunyikan bilah tindakan / bilah alat dan juga bilah status di aktivitas layar penuh Anda

Rajesh Peram
sumber
7

AndroidManifest.xml

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

I. Aplikasi utama Anda temanya adalah Theme.AppCompat.Light.DarkActionBar

Untuk menyembunyikan 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>

Untuk menyembunyikan bilah navigasi sistem

public class MainActivity extends AppCompatActivity {

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

II Tema aplikasi utama Anda adalah Theme.AppCompat.Light.NoActionBar

Untuk menyembunyikan 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>

Untuk menyembunyikan bilah navigasi sistem

Mirip seperti Theme.AppCompat.Light.DarkActionBar.

Demo

Phan Van Linh
sumber
Terima kasih. Diuji pada Android 5.0.1.
CoolMind
@CoolMind bertemu Anda lagi. Terima kasih atas editan Anda
Phan Van Linh
6

terima kasih atas jawaban @ Kristen saya mendapatkan kesalahan

android.util.AndroidRuntimeException: requestFeature () harus dipanggil sebelum menambahkan konten

Saya memecahkan ini menggunakan

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

    -----
    -----
}
Bikesh M
sumber
Haruskah kita atur requestWindowFeature(Window.FEATURE_NO_TITLE);sebelumnya super.onCreate(savedInstanceState);?
CoolMind
4

tampilkan Immersive Lengkap:

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

keluar dari mode imersif penuh:

 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);
    }
Gal Rom
sumber
3

Saya ingin menggunakan tema saya sendiri daripada menggunakan @android: style / Theme.NoTitleBar.Fullscreen. Tapi itu tidak berfungsi seperti yang disebutkan beberapa pos di sini, jadi saya melakukan beberapa penyesuaian untuk mengetahuinya.

Di AndroidManifest.xml:

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

Di 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>

Catatan: dalam kasus saya, saya harus menggunakan name="windowActionBar"daripada name="android:windowActionBar"sebelum berfungsi dengan benar. Jadi saya hanya menggunakan keduanya untuk memastikan jika saya perlu port ke versi Android baru nanti.

Chef Firaun
sumber
3

Berikut ini contoh kode. Anda dapat menghidupkan / mematikan bendera untuk menyembunyikan / menampilkan bagian-bagian tertentu.

masukkan deskripsi gambar di sini

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

Kemudian, Anda mengatur ulang ke status default :

masukkan deskripsi gambar di sini

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

Anda dapat memanggil fungsi-fungsi di atas dari onCreate:

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

KOTLIN

Mengikuti google doc, ada cara mudah:

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

Álvaro Agüero
sumber
2

TIP: Menggunakan getWindow (). SetLayout () dapat mengacaukan tampilan layar penuh Anda! Perhatikan dokumentasi untuk metode ini mengatakan:

Atur parameter lebar dan tinggi tata letak jendela ... Anda dapat mengubahnya menjadi ... nilai absolut untuk membuat jendela yang bukan layar penuh.

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

Untuk keperluan saya, saya menemukan bahwa saya harus menggunakan setLayout dengan parameter absolut untuk mengubah ukuran jendela layar penuh saya dengan benar. Sebagian besar waktu, ini bekerja dengan baik. Itu disebut oleh acara onConfigurationChanged (). Namun, ada masalah. Jika pengguna keluar dari aplikasi, mengubah orientasi, dan masuk kembali, itu akan menyebabkan kode saya keluar termasuk setLayout (). Selama jendela waktu entri ulang ini, bilah status saya (yang disembunyikan oleh manifes) akan dibuat muncul kembali, tetapi pada waktu lain setLayout () tidak akan menyebabkan ini! Solusinya adalah menambahkan panggilan setLayout () tambahan setelah yang dengan nilai keras seperti:

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

Jendela kemudian diukur ulang dengan benar, dan bilah status tidak muncul kembali terlepas dari peristiwa yang memicu ini.

Terima kasih
sumber
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);
    }
}
Tarun konda
sumber
2

Di dalam 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>

Ini berhasil untuk saya. Semoga ini bisa membantu Anda.

Anuj Sain
sumber
2

Dengan kotlin inilah yang saya lakukan:

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

    }
}

Mode Immersive

Mode immersive ditujukan untuk aplikasi di mana pengguna akan banyak berinteraksi dengan layar. Contohnya adalah permainan, melihat gambar di galeri, atau membaca konten yang dihafalkan, seperti buku atau slide dalam presentasi. Untuk ini, cukup tambahkan baris ini:

View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

Lekat immersive

Dalam mode imersif reguler, setiap kali pengguna menggesek dari tepi, sistem menangani pengungkapan bilah sistem — aplikasi Anda bahkan tidak akan menyadari bahwa gerakan itu terjadi. Jadi, jika pengguna sebenarnya perlu menggesek dari tepi layar sebagai bagian dari pengalaman aplikasi utama — seperti ketika bermain game yang membutuhkan banyak gesekan atau menggunakan aplikasi menggambar — Anda sebaiknya mengaktifkan mode imersif "lengket" .

View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

Untuk informasi lebih lanjut: Aktifkan mode layar penuh

Jika Anda menggunakan keyboard, kadang-kadang StatusBar muncul ketika keyboard muncul. Dalam hal ini saya biasanya menambahkan ini ke style xml saya

styles.xml

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

Dan juga baris ini ke manifes saya

<activity
        android:name=".ui.login.LoginActivity"
        android:label="@string/title_activity_login"
        android:theme="@style/FullScreen">
Jorge Casariego
sumber
Terima kasih. Membutuhkan API 16 dan 19.
CoolMind
2

Cukup tempel kode ini ke dalam onCreate()metode

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

Ini berhasil untuk saya.

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);
    }
Singh
sumber
1
Di tempat lain lebih baik menggunakan yang berikut: 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();

}
Sai Gopi N
sumber
1

Setelah banyak waktu tanpa hasil, saya datang dengan solusi saya sendiri yang sama dengan pengembang lain. Jadi, jika seseorang membutuhkannya, masalah saya adalah bilah navigasi sistem tidak bersembunyi setelah menelepon. Juga dalam kasus saya, saya membutuhkan lansekap, jadi kalau-kalau komentar garis itu dan itu semua. Pertama-tama buat gaya

    <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>

Ini file manifes saya

<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>

Ini adalah aktivitas spalsh saya

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

}

Dan ini adalah aktivitas layar penuh utama saya. onSystemUiVisibilityChange metode ini berhenti penting jika tidak bar navigasi utama android setelah panggilan akan tetap dan tidak hilang lagi. Masalah yang sangat menjengkelkan, tetapi fungsi ini memecahkan masalah itu.

MainActivity kelas publik memperluas 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);

                        }
                }
            });

}

}

Ini adalah tata letak layar splash saya:

<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>

Saya harap ini akan membantu Anda

Jevgenij Kononov
sumber
1

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

Aktivitas :

@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>
Dheerendra Mitm
sumber
1

Buat aktivitas kosong dan tambahkan dua baris 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);
    }
    ...
}
wannik
sumber
1

Gunakan metode ini setelah setContentView di onCreate () dan meneruskan objek Window dengan 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
    );
}

Kode ini juga berfungsi untuk takik layar. Untuk memeriksa layar penuh takik Anda memerlukan Android P tetapi jika Anda memiliki ponsel layar takik kemudian pergi ke pengaturan -> Pengaturan tampilan -> rasio tampilan aplikasi ---> pilih aplikasi Anda ---> akan ada dua opsi yang aman tampilan dan layar penuh, silakan pilih layar penuh dan jalankan aplikasi, Anda dapat melihat layar penuh dalam takik juga tanpa Pie android

Antek
sumber
1

Untuk menjadikan aktivitas Anda layar penuh lakukan ini:

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

Ini akan menyembunyikan bilah alat dan status.

Tetapi dalam beberapa kasus, Anda mungkin ingin menampilkan bilah status dengan latar belakang transparan, dalam hal ini, lakukan ini:

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

Beberapa alternatif lain untuk menyembunyikan bilah alat alih-alih getSupportActionBar().hide():

  1. Hapus bilah alat dengan mengubah induk tema aplikasi:

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

  1. Jika Anda ingin menghapus bilah alat hanya dari satu aktivitas lalu buka manifes, di bawah tag aktivitas tambahkan ini: android:theme="@style/Theme.AppCompat.Light.NoActionBar"

Untuk pecinta kotlin , mengapa tidak menggunakan fungsi ekstensi:

Untuk kasus pertama:

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

Dan sebut ini sebelumnya setContentView:

makeItFullScreenStatusBarVisible()

Untuk yang kedua:

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

Dan sebut itu sebelumnya setContentView:

makeItFullScreenStatusBarHidden()
Suraj Vaishnav
sumber
0

Di Android 10, tidak ada yang berhasil untuk saya.

Tapi saya yang bekerja dengan sangat baik (baris pertama di lapangan):

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

    setContentView(....);

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

Nikmati :)

Arnaud
sumber
0

Untuk menampilkan konten melalui takik atau area guntingan. Ini dapat membantu dari dokumen:

LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES - Konten dirender ke dalam area potongan dalam mode potret dan lanskap.

Hal utama bagi saya adalah baris ini dalam gaya aktivitas:

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

Bagi saya, saya ingin menampilkan gambar dalam mode imersif. Ketika saya mengkliknya, saya ingin UI sistem (status & navigasi bar) muncul.

Inilah solusi saya:

1- Dalam Kegiatan, beberapa metode untuk menampilkan / menyembunyikan UI sistem (bilah status / nav)

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- Pastikan ini di tampilan root tata letak xml Anda

android:fitsSystemWindows="false"

3 - Style for Full screen Activity akan memberikan status / navigasi bar latar belakang semi transparan ketika mereka muncul:

<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>
Badr
sumber