android immersive - Activité en plein écran sur Android?




12 Answers

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 fichier AndroidManifest.xml :

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

Modifier:

Si vous utilisez AppCompatActivity, vous devez définir le thème comme indiqué ci-dessous

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

Comment faire une activité en plein écran? Je veux dire sans la barre de notification. Des idées?




Si vous ne voulez pas utiliser le thème @android:style/Theme.NoTitleBar.Fullscreen parce que vous utilisez déjà un de vos thèmes, vous pouvez 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>



Si vous utilisez AppCompat et ActionBarActivity, utilisez cette

getSupportActionBar().hide();




Essayez ceci avec appcompat depuis style.xml . Il peut supporter 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" />



merci pour la réponse @Cristian je recevais 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);

    -----
    -----
}



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>

Ensuite, mettez le nom dans votre manifeste ...




ASTUCE: Utiliser getWindow (). SetLayout () peut bousiller votre plein écran! Notez la documentation de cette méthode dit:

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 faire 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 trouvé que je devais utiliser setLayout avec des paramètres absolus pour redimensionner ma fenêtre plein écran correctement. La plupart du temps, cela a bien fonctionné. Il a été appelé par un événement onConfigurationChanged (). Il y avait un hoquet, cependant. Si l'utilisateur quittait l'application, changeait l'orientation et entrait de nouveau, cela conduirait à déclencher mon code qui incluait setLayout (). Pendant cette fenêtre de temps de ré-entrée, ma barre de statut (qui était cachée par le manifeste) serait faite pour réapparaître, mais à tout autre moment setLayout () ne causerait pas cela! La solution consistait à 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é redimensionnée correctement et la barre d'état n'a pas réapparu indépendamment de l'événement qui l'a déclenchée.




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



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

}



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>



Avec kotlin, c'est comme ça que je l'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 interagit fortement avec l'écran. Les exemples sont les jeux, la visualisation 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

Sticky immersif

En mode immersif normal, chaque fois qu'un utilisateur passe d'un bord à l'autre, le système prend soin de révéler les barres du système: votre application ne sera même pas informée que le geste s'est produit. Ainsi, si l'utilisateur a besoin de faire défiler le bord de l'écran dans le cadre de l'expérience principale de l'application, par exemple lorsque vous jouez à un jeu qui nécessite beaucoup de glisser ou d'utiliser une application de dessin, vous devez activer le mode immersif. .

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, je l'ajoute généralement à 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">



getWindow().addFlags(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);



Related