Activité plein écran dans Android?


Réponses:


1052

Vous pouvez le faire par programme:

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

Ou vous pouvez le faire via votre AndroidManifest.xmlfichier:

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

Éditer:

Si vous utilisez AppCompatActivity, vous devez ajouter un nouveau thème

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

puis l'utiliser.

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

Merci à https://stackoverflow.com/a/25365193/1646479


65
juste l'attribut android: theme = "@ android: style / Theme.NoTitleBar.Fullscreen" sur votre activité sur le manifeste suffit. Merci :)
Praveen

19
Si votre application utilise un autre thème, utilisez le nom de thème correspondant Eg For White theme @android:style/Theme.Holo.Light.NoActionBar.Fullscreen
ankitjaininfo

5
Définir le thème dans le manifeste provoque un écran noir au lancement, il est préférable de le faire en code.
aurelien_lepage

4
si vous utilisez ActionBar et que vous ne voulez pas de TitleBar supprimez la ligne `requestWindowFeature () 'car cela provoquera un NullPointer sinon
X.X_Mass_Developer

3
Si vous utilisez AppCompatActivity, vous devez mettre requestWindowFeatureavant super.onCreate. Sinon, vous obtiendrez:android.util.AndroidRuntimeException: requestFeature() must be called before adding content
Slav

128

Il existe une technique appelée mode plein écran immersif disponible dans KitKat . Démo immersive en mode plein écran

Exemple


5
N'oubliez pas qu'une "bulle de rappel" sera affichée la première fois que votre application entrera en mode immersif. C'est bien pour certaines activités, mais pas si vous faites un écran de démarrage, par exemple.
LarsH

pauses lors de l'utilisation de filateurs
ViVekH

souhaitez masquer uniquement la barre de navigation inférieure et non la barre d'état. Est-il possible de faire?
PvDev

76

Si vous ne souhaitez pas utiliser le thème @android:style/Theme.NoTitleBar.Fullscreenparce que vous utilisez déjà un thème qui vous appartient, vous pouvez l'utiliser android:windowFullscreen.

Dans AndroidManifest.xml:

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

Dans styles.xml:

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

ajouter un parent comme thème parent
Saurabh Bhandari

vous devez également placer <item name = "windowActionBar"> false </item>
htafoya

52

Dans le fichier 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>  

Ou en code Java :

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

2
vous devez ajouter un code pour faire cette chose par programme dans JAVA
Dr. aNdRO

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

souhaitez masquer uniquement la barre de navigation inférieure et non la barre d'état. Est-il possible de faire?
PvDev

32

Si vous utilisez AppCompat et ActionBarActivity, utilisez ce

getSupportActionBar().hide();


Cela ne supprimera pas la barre d'état en haut
Manohar Reddy

24

Attention à

requestWindowFeature(Window.FEATURE_NO_TITLE);

Si vous utilisez une méthode pour définir la barre d'actions comme suit:

getSupportActionBar().setHomeButtonEnabled(true);

Cela provoquera une exception de pointeur nul.


La raison en est que vous ajustez la barre d'action, que le code de redimensionnement tente de cacher!
Andy

22

Essayez ceci avec appcompat de style.xml. Il prend en charge toutes les plateformes.

<!-- 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" />

solution agréable et facile. Pour les débutants, ajoutez ce thème dans la balise Activity ou Application dans AndroidManifest.xml: android: theme = "@ style / AppTheme.FullScreen"
Leos Literak

1
souhaitez masquer uniquement la barre de navigation inférieure et non la barre d'état. Est-il possible de faire?
PvDev

13

Il est très facile d'utiliser Android Studio (la version actuelle est la 2.2.2 pour le moment) pour ajouter une activité plein écran.

Voir les étapes:

  1. Faites un clic droit sur votre package principal java> Sélectionnez "Nouveau"> Sélectionnez "Activité"> Ensuite, cliquez sur "Activité plein écran".

La première étape

  1. Personnalisez l'activité («Nom de l'activité», «Nom de la mise en page», etc.) et cliquez sur «Terminer».

Deuxième étape

Terminé!

Vous avez maintenant une activité plein écran facile à réaliser (voir la classe java et la disposition des activités pour savoir comment les choses fonctionnent)!


8

Pour ceux qui utilisent AppCompact ... style.xml

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

Mettez ensuite le nom dans votre manifeste ...


7

Vous devez d'abord définir votre thème d'application avec "NoActionBar" comme ci-dessous

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

Ajoutez ensuite ces lignes dans votre activité plein écran.

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

Il masquera la barre d'action / barre d'outils et également la barre d'état dans votre activité en plein écran


7

AndroidManifest.xml

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

I. Votre application principale, le thème est Theme.AppCompat.Light.DarkActionBar

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

Pour masquer la barre de navigation du système

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. Le thème de votre application principale est Theme.AppCompat.Light.NoActionBar

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

Pour masquer la barre de navigation du système

Similaire comme Theme.AppCompat.Light.DarkActionBar.

Démo


Merci. Testé sur Android 5.0.1.
CoolMind

@CoolMind vous retrouve. Merci pour votre édition
Phan Van Linh

6

merci pour la réponse @Cristian je recevais une erreur

android.util.AndroidRuntimeException: requestFeature () doit être appelé avant d'ajouter du contenu

j'ai résolu cela en utilisant

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

    -----
    -----
}

Faut-il se mettre requestWindowFeature(Window.FEATURE_NO_TITLE);avant super.onCreate(savedInstanceState);?
CoolMind

4

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

sortir du mode immersif complet:

 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

Je voulais utiliser mon propre thème au lieu d'utiliser @android: style / Theme.NoTitleBar.Fullscreen. Mais cela ne fonctionnait pas, comme certains articles ici l'avaient mentionné, j'ai donc fait quelques ajustements pour le comprendre.

Dans AndroidManifest.xml:

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

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

Remarque: dans mon cas, j'ai dû utiliser name="windowActionBar"au lieu d' name="android:windowActionBar"avant que cela fonctionnait correctement. J'ai donc utilisé les deux pour m'assurer que dans le cas où je devrais porter vers une nouvelle version Android plus tard.


3

Voici un exemple de code. Vous pouvez activer / désactiver les drapeaux pour masquer / afficher des parties spécifiques.

entrez la description de l'image ici

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

Ensuite, vous réinitialisez à l' état par défaut :

entrez la description de l'image ici

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

Vous pouvez appeler les fonctions ci-dessus depuis votre onCreate:

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

3

KOTLIN

En suivant le doc google, il existe un moyen simple:

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

CONSEIL: Utiliser getWindow (). SetLayout () peut bousiller votre affichage plein écran! Notez que la documentation de cette méthode indique:

Définissez les paramètres de disposition de largeur et de hauteur de la fenêtre ... vous pouvez les changer en ... une valeur absolue pour créer une fenêtre qui n'est pas en plein écran.

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

Pour mes besoins, j'ai constaté que je devais utiliser setLayout avec des paramètres absolus pour redimensionner correctement ma fenêtre plein écran. La plupart du temps, cela a bien fonctionné. Il a été appelé par un événement onConfigurationChanged (). Il y a eu cependant un hoquet. Si l'utilisateur quittait l'application, changeait l'orientation et revenait, cela entraînerait le déclenchement de mon code qui comprenait setLayout (). Pendant cette fenêtre de temps de rentrée, ma barre d'état (qui était cachée par le manifeste) devrait réapparaître, mais à tout autre moment setLayout () ne provoquerait pas cela! La solution était d'ajouter un appel setLayout () supplémentaire après celui avec les valeurs dures comme ceci:

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

La fenêtre a ensuite été correctement redimensionnée et la barre d'état n'est pas réapparue quel que soit l'événement qui a déclenché cela.


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>

Cela a fonctionné pour moi. J'espère que cela vous aidera.


2

Avec kotlin, c'est comme ça que j'ai fait:

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 immersif

Le mode immersif est destiné aux applications dans lesquelles l'utilisateur interagira fortement avec l'écran. Des exemples sont des jeux, l'affichage d'images dans une galerie ou la lecture de contenu paginé, comme un livre ou des diapositives dans une présentation. Pour cela, ajoutez simplement ces lignes:

View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

Immersif collant

En mode immersif normal, chaque fois qu'un utilisateur glisse depuis un bord, le système se charge de révéler les barres système - votre application ne sera même pas consciente que le geste s'est produit. Donc, si l'utilisateur doit réellement glisser depuis le bord de l'écran dans le cadre de l'expérience de l'application principale, comme lors d'un jeu qui nécessite beaucoup de balayage ou à l'aide d'une application de dessin, vous devez plutôt activer le mode immersif "collant" .

View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

Pour plus d'informations: Activer le mode plein écran

Dans le cas où vous utilisez le clavier, il arrive parfois que StatusBar s'affiche lorsque le clavier apparaît. Dans ce cas, j'ajoute généralement cela à mon style xml

styles.xml

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

Et aussi cette ligne à mon manifeste

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

Merci. Nécessite les API 16 et 19.
CoolMind

2

Collez simplement ce code dans la onCreate()méthode

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

1

Ça a marché pour moi.

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
Dans le cas contraire, il serait préférable d'utiliser les éléments suivants: 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

Après beaucoup de temps sans succès, je suis venu avec ma propre solution qui est similaire à un autre développeur. Donc, si quelqu'un a besoin d'elle, c'est que mon problème était que la barre de navigation du système ne se cachait pas après avoir appelé. Aussi dans mon cas, j'avais besoin de paysage, donc juste au cas où commenter cette ligne et tout ça. Créer d'abord du style

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

Ceci est mon fichier manifeste

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

Ceci est mon activité spalsh

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

}

Et c'est ma principale activité plein écran. onSystemUiVisibilityChange cette méthode est importante, sinon la barre de navigation principale Android après l'appel restera et ne disparaîtra plus. Problème vraiment irritant, mais cette fonction résout ce problème.

classe publique MainActivity étend 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);

                        }
                }
            });

}

}

Voici ma disposition d'écran de démarrage:

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

J'espère que cela t'aidera


1

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

Activité:

@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

Créez une activité vide et ajoutez deux lignes 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

Utilisez cette méthode après setContentView dans onCreate () et passez l' objet Window par 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
    );
}

Ce code fonctionnera également pour l'écran Notch. Pour vérifier l'encoche en plein écran, vous avez besoin d'Android P, mais si vous avez un téléphone à écran encoche, allez dans Paramètres -> Paramètres d'affichage -> Taux d'affichage de l'application ---> Sélectionnez votre application ---> Il y aura deux options sûres sont affichage et plein écran, veuillez sélectionner le plein écran et exécutez l'application, vous pouvez voir le plein écran dans l'encoche également sans avoir Android Pie


1

Pour rendre votre activité en plein écran, procédez comme suit:

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

Cela masquera la barre d'outils et la barre d'état.

Mais dans certains cas, vous souhaiterez peut-être afficher la barre d'état avec un arrière-plan transparent, dans ce cas, procédez comme suit:

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

Une autre alternative pour masquer la barre d'outils au lieu de getSupportActionBar().hide():

  1. Supprimez la barre d'outils en modifiant le parent du thème de l'application:

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

  1. Si vous souhaitez supprimer la barre d'outils d'une seule activité, accédez au manifeste, sous la balise d'activité, ajoutez ceci: android:theme="@style/Theme.AppCompat.Light.NoActionBar"

Pour les amateurs de kotlin , pourquoi ne pas utiliser les fonctions d'extension:

Pour le premier cas:

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

Et appelez cela avant setContentView:

makeItFullScreenStatusBarVisible()

Pour le deuxième:

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

Et appelez-le avant setContentView:

makeItFullScreenStatusBarHidden()

0

Sur Android 10, aucun ne fonctionnait pour moi.

Mais moi qui a parfaitement bien fonctionné (1ère ligne en oncreate):

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

    setContentView(....);

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

prendre plaisir :)


0

Pour afficher le contenu à travers l'encoche ou la zone de découpe. Cela peut aider à partir des documents:

LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES - Le contenu s'affiche dans la zone de découpe en mode portrait et paysage.

L'essentiel pour moi était cette ligne dans le style d'activité:

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

Pour moi, je voulais montrer une image en mode immersif. Lorsque je clique dessus, je souhaite que l'interface utilisateur du système (barres d'état et de navigation) s'affiche.

Voici ma solution:

1- Dans l'activité, quelques méthodes pour afficher / masquer l'interface utilisateur du système (barres d'état / de navigation)

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- Assurez-vous que cela dans la vue racine de votre mise en page XML

android:fitsSystemWindows="false"

3- Le style pour l'activité plein écran donnera aux barres d'état / de navigation un arrière-plan semi transparent lorsqu'elles apparaissent:

<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>
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.