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.
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.
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.
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
Enveloppez votre dialog_custom_layout.xml dans RelativeLayout au lieu de tout autre modèle.
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.
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" />
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>
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";.
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.
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"/>