web-dev-qa-db-fra.com

Comment obtenir une fenêtre d'activité de style dialogue pour remplir l'écran?

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

Apparemment, une fenêtre de dialogue (ou une activité avec le thème de la boîte de dialogue) s’agrandira uniquement en fonction de son contenu, mais même cela ne fonctionne pas toujours. Par exemple, je montre un cercle de barre de progression dont les propriétés width et height sont définies sur FILL_PARENT (tout comme son conteneur de présentation), mais la boîte de dialogue entoure néanmoins 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, mais que celle-ci passe à la taille plein écran sans que son contenu ne soit redimensionné également.

131
Matthias

J'ai trouvé la solution:

Dans votre activité pour laquelle le style Theme.Dialog est défini, procédez comme suit:

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

    setContentView(R.layout.your_layout);

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

Il est important d'appeler Window.setLayout() après vous appelez setContentView(), sinon cela ne fonctionnera pas.

297
Matthias

Vous pouvez ajouter ces valeurs à votre style Android: windowMinWidthMajor et Android: windowMinWidthMinor

<style name="Theme_Dialog" parent="Android:Theme.Holo.Dialog">
    ...
    <item name="Android:windowMinWidthMajor">96%</item>
    <item name="Android:windowMinWidthMinor">96%</item>
</style>

La largeur minimale autorisée pour la fenêtre, le long du petit axe de l'écran.

55

Je veux juste remplir seulement 80% de l'écran pour ce que j'ai fait comme ça ci-dessous

        DisplayMetrics metrics = getResources().getDisplayMetrics();
        int screenWidth = (int) (metrics.widthPixels * 0.80);

        setContentView(R.layout.mylayout);

        getWindow().setLayout(screenWidth, LayoutParams.WRAP_CONTENT); //set below the setContentview

cela fonctionne seulement quand je mets la ligne getwindow (). setLayout ... sous la setContentView (..)

merci @Mathias

49
Padma Kumar

Enveloppez votre dialog_custom_layout.xml dans RelativeLayout au lieu de tout autre modèle.

9
Ayan

Pour le dialogue Cela peut être utile à quelqu'un . Je veux qu'un dialogue prenne toute la largeur de l'écran cherché beaucoup mais rien trouvé utile. Enfin cela a fonctionné pour moi:

mDialog.setContentView(R.layout.my_custom_dialog);
mDialog.getWindow().setBackgroundDrawable(null);

après avoir ajouté ceci, ma boîte de dialogue apparaît sur toute la largeur de l'écran.

7
Rahul Sharma

La réponse de Matthias est la plupart du temps correcte, mais elle ne remplit toujours pas tout l'écran car il comporte un petit rembourrage de chaque côté (souligné par @Holmes). En plus de son code, nous pourrions résoudre ce problème en étendant le style Theme.Dialog et en ajoutant des 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 l'activité avec le thème défini sur MyDialog:

<activity
    Android:name=".FooActivity"
    Android:theme="@style/MyDialog" />
2
DYS

Définissez une largeur minimale dans la disposition 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>
2
roy mathew

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 la boîte de dialogue AppCompat car j'utilise AppCompatActivity comme s’applique à toutes mes activités. Il y aura un problème qui rend le dialogue a padding sur tous les côtés (en haut, à droite, en 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);
}

Sur 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 le remarquerez peut-être, le problème qui engendre un bourrage dans notre boîte de dialogue est "Android: windowBackground";.

1
HendraWD

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>

Dans le thème d'ensemble de fichiers AndroidManifest.xml pour l'activité recherchée:

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

C'est tout, pas besoin d'appeler des méthodes par programme. 

1
Stanojkovic

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"/>
0
Makvin