145 votes

Comment faire en sorte qu'une fenêtre d'activité de type Dialog remplisse l'écran ?

J'utilise une activité avec le thème du dialogue, et je veux qu'elle soit en plein écran. J'ai essayé toutes sortes de choses, même de passer par le WindowManager pour étendre la fenêtre en largeur et en hauteur manuellement, mais rien ne fonctionne.

Apparemment, une fenêtre de dialogue (ou une activité ayant pour thème le dialogue) ne se développe qu'en fonction de son contenu, mais même cela ne fonctionne pas toujours. Par exemple, j'affiche une barre de progression circulaire dont la largeur et la hauteur sont définies sur FILL_PARENT (tout comme son conteneur de mise en page), mais la boîte de dialogue s'enroule autour de la barre de progression beaucoup plus petite au lieu de remplir l'écran.

Il doit y avoir un moyen d'afficher quelque chose de petit à l'intérieur d'une fenêtre de dialogue et de l'étendre en plein écran sans que son contenu soit également redimensionné ?

2 votes

Remarque intéressante : lorsque vous définissez la largeur et la hauteur du conteneur de mise en page sur une valeur réelle en pixels, la boîte de dialogue est redimensionnée en conséquence. Mais lorsqu'on lui attribue la valeur FILL_PARENT, elle ne le fait pas...

0 votes

Vraiment ? La disposition que l'activité instancie, a-t-elle une balise parent Relative ou LinearLayout qui est définie sur la hauteur et la largeur de fill_parent ? J'ai implémenté quelques activités avec un thème de dialogue et je n'ai jamais eu de problème avec l'occupation de tout l'écran.

0 votes

Oui, l'activité a un LinearLayout réglé sur FILL_PARENT pour la largeur et la hauteur.

7voto

HendraWD Points 1561

Cette réponse est une solution de contournement pour ceux qui utilisent "Theme.AppCompat.Dialog" ou tout autre descendant de "Theme.AppCompat.Dialog". comme "Theme.AppCompat.Light.Dialog", "Theme.AppCompat.DayNight.Dialog", etc. Je dois moi-même utiliser le dialogue AppCompat car j'utilise AppCompatActivity comme extension pour toutes mes activités. Il y aura un problème qui fera que le dialogue aura du padding sur tous les côtés (haut, droite, bas et gauche) si nous utilisons la réponse acceptée.

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

    setContentView(R.layout.your_layout);

    getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}

Dans le style de votre activité, ajoutez ces codes

<style name="DialogActivityTheme" parent="Theme.AppCompat.Dialog">
    <item name="windowNoTitle">true</item>
    <item name="android:windowBackground">@null</item>
</style>

Comme vous pouvez le remarquer, le problème qui génère le remplissage de notre boîte de dialogue est "Android:windowBackground", donc ici je mets le fond de la fenêtre à null.

2voto

Danny Suen Points 86

La réponse de Matthias est en grande partie correcte mais elle ne remplit toujours pas tout l'écran car elle a un petit remplissage de chaque côté (signalé par @Holmes). En plus de son code, nous pourrions résoudre ce problème en étendant le style de Theme.Dialog et en ajoutant quelques attributs comme celui-ci.

<style name="MyDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
</style>

Ensuite, nous déclarons simplement Activity avec le thème défini à MyDialog :

<activity
    android:name=".FooActivity"
    android:theme="@style/MyDialog" />

2voto

Stanojkovic Points 1

Ce serait utile pour quelqu'un comme moi. Créer un style de dialogue personnalisé :

<style name="MyDialog" parent="Theme.AppCompat.Light.Dialog">
    <item name="windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>
</style>

Sur AndroidManifest.xml Le fichier fixe le thème de l'activité recherchée :

<activity
        android:name=".CustomDialog"
        ...
        android:theme="@style/MyDialog"/>

C'est tout, il n'est pas nécessaire d'appeler les méthodes par programme.

0 votes

Il y a toujours un remplissage de chaque côté (haut, droite, bas et gauche) et si nous avons besoin d'afficher la barre d'état aussi, cette solution échouera.

0 votes

Vérifiez stackoverflow.com/a/39590004/3940133 si vous avez des rembourrages de chaque côté

2voto

roy mathew Points 1542

Définissez une largeur minimale pour la mise en page la plus haute.

android:minWidth="300dp"

Par exemple :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"
  xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="300dp">

<!-- Put remaining contents here -->

</LinearLayout>

0voto

Makvin Points 857

Dans votre fichier manifeste où notre activité est définie

<activity
        android:name=".YourPopUpActivity"
        android:theme="@android:style/Theme.Holo.Dialog" >
    </activity>

sans barre d'action

<activity android:name=".YourPopUpActivity"
            android:theme="@android:style/Theme.Holo.Dialog.NoActionBar"/>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X