J'essaye de montrer un DialogFragment presque plein écran. Mais je ne suis pas en mesure de le faire.
La façon dont je montre le fragment provient directement de la documentation du développeur Android
FragmentManager f = ((Activity)getContext()).getFragmentManager();
FragmentTransaction ft = f.beginTransaction();
Fragment prev = f.findFragmentByTag("dialog");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
// Create and show the dialog.
DialogFragment newFragment = new DetailsDialogFragment();
newFragment.show(ft, "dialog");
Je sais naïvement essayé de définir le RelativeLayout dans le fragment sur fill_parent et certains minWidth et minHeight.
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="1000px"
android:minHeight="600px"
android:background="#ff0000">
Je saurais m'attendre à ce que DialogFragment remplisse la majorité de l'écran. Mais je ne semble redimensionner que verticalement mais seulement jusqu'à une certaine largeur fixe horizontalement.
J'ai également essayé de définir les attributs de fenêtre dans le code, comme suggéré ici: http://groups.google.com/group/android-developers/browse_thread/thread/f0bb813f643604ec . Mais cela n'a pas aidé non plus.
Je ne comprends probablement pas quelque chose sur la façon dont Android gère les dialogues, car je suis tout nouveau dans ce domaine. Comment puis-je faire quelque chose comme ça? Existe-t-il d'autres moyens d'atteindre mon objectif?
Appareil Android:
Asus EeePad Transformer
Android 3.0.1
Mise à jour: j'ai maintenant réussi à le mettre en plein écran, avec le code suivant dans le fragment
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NO_FRAME, android.R.style.Theme_Holo_Light);
}
Malheureusement, ce n'est pas tout à fait ce que je veux. J'ai vraiment besoin d'un petit "rembourrage" autour de la boîte de dialogue pour afficher l'arrière-plan.
Des idées pour y parvenir?
Réponses:
Essayez de passer à un
LinearLayout
au lieu deRelativeLayout
. Je visais l'API 3.0 Honeycomb lors des tests.et les mises en page : fragment_dialog.xml
main.xml
la source
Pour afficher DialogFragment en plein écran
Remplacez
onStart
votre DialogFragment comme ceci:Et merci beaucoup à ce post: Le-mystère-des-androïdes-fragments-de-dialogue-plein-écran
la source
ViewGroup.LayoutParams.WRAP_CONTENT
pour la hauteur. Merci.la source
Selon ce lien, le plein écran de DialogFragment montre un rembourrage sur les côtés, cela fonctionnera comme un charme.
la source
Créer un DialogFragment plein écran en utilisant uniquement le style
Première solution
**1. Ajoutez à votre `style.xml`: **2. Ajoutez à votre DialogFragment:
Solution alternative
la source
Dans mon cas, j'ai utilisé l'approche suivante:
De plus LinearLayout pour remplir tout l'espace avec du contenu.
Mais il y avait encore de petits écarts entre les bords gauche et droit de la boîte de dialogue et les bords de l'écran sur certains appareils Lollipop + (par exemple Nexus 9).
Ce n'était pas évident mais j'ai finalement compris que pour le rendre pleine largeur sur tous les appareils et plates-formes , l'arrière-plan de la fenêtre devrait être spécifié à l'intérieur de styles.xml comme suit:
Et bien sûr, ce style doit être utilisé lorsque nous créons la boîte de dialogue comme suit:
la source
<item name="android:windowFullscreen">true</item> <item name="android:windowIsFloating">false</item>
Source: TechRepublicJ'ai rencontré le problème avant lors de l'utilisation d'une boîte de dialogue plein écran Fragment: il y a toujours un rembourrage tout en ayant défini le plein écran. essayez ce code dans la méthode onActivityCreated () de dialogFragment:
la source
Dans la mesure où l'API Android a été mise à jour, la méthode suggérée pour afficher une boîte de dialogue en plein écran est la suivante:
sinon, si vous ne voulez pas qu'il soit affiché en plein écran, vous pouvez faire de cette façon:
J'espère que ça aide.
ÉDITER
Sachez que la solution que j'ai donnée fonctionne mais présente une faiblesse qui peut parfois être gênante. L'ajout de DialogFragment au
android.R.id.content
conteneur ne vous permettra pas de gérerDialogFragment#setCancelable()
correctement la fonctionnalité et pourrait également entraîner des comportements inattendus lors de l'ajout du DialogFragment lui-même à la pile arrière.Je vous ai donc suggéré de changer simplement le style de votre DialogFragment dans la méthode onCreate comme suit:
J'espère que ça aide.
la source
Essayez d'utiliser setStyle () dans onCreate et remplacez onCreateDialog make dialog sans titre
ou remplacez simplement onCreate () et setStyle avec le code.
la source
Cela peut en effet dépendre de la manière dont la mise en page est définie. Mais pour s'assurer que la boîte de dialogue obtient la taille requise, la meilleure solution est de fournir les LayoutParams une fois la boîte de dialogue affichée (et non lors de la création). Sur un DialogFragment, la boîte de dialogue est affichée sur la méthode onStart , donc une méthode valide pour obtenir la pleine largeur est:
Pour fournir également un thème, ou un style, comme un style NO_TITLE, le meilleur emplacement est sur la méthode onCreate :
la source
Remarque: même on peut trouver la bonne réponse ici. Mais je veux clarifier une confusion.
Utilisez le code ci-dessous pour
android.app.DialogFragment
Utilisez le code ci-dessous pour
android.support.v4.app.DialogFragment
la source
Et la version kotlin!
la source
Voici la solution pour résoudre ce problème:
la source
Créez le thème ci-dessous dans votre style.xml:
puis définissez le style dans DialogFragment
la source
Chirag Nagariya a raison sauf l'ajout '_Fullscreen'. il peut être résolu en utilisant n'importe quel style de base qui n'est pas dérivé du style Dialog. «android.R.style.Theme_Black_NoTitleBar» peut également être utilisé.
la source
Au cas où quelqu'un d'autre rencontrerait cela, j'ai eu une expérience similaire à celle-ci, mais il s'avère que le problème était que j'avais oublié de renvoyer la vue gonflée à partir de onCreateView (à la place, en retournant le super.onCreateView par défaut). J'ai simplement renvoyé la vue gonflée correcte et cela a résolu le problème.
la source
Cette solution applique un thème plein écran sur la boîte de dialogue, qui est similaire au setStyle de Chirag dans onCreate. Un inconvénient est que savedInstanceState n'est pas utilisé.
la source
Essayez ceci pour une boîte de dialogue de fragment commune pour plusieurs utilisations. J'espère que cela vous aidera à parier
la source
Voici ce que vous devez définir pour fragmenter:
Dans ton cas:
Et pourquoi? Parce que DialogFragment (lorsqu'il n'est pas indiqué explicitement), utilisera ses styles internes qui y envelopperont votre mise en page personnalisée (pas de plein écran, etc.).
Et la mise en page? Aucun moyen de piratage nécessaire, cela fonctionne très bien:
Prendre plaisir
la source
Je suis très en retard pour répondre à cette question mais je veux partager cette réponse afin qu'à l'avenir tout le monde puisse l'utiliser.
J'ai utilisé ce code dans mon projet, il fonctionne en version inférieure ainsi qu'en version supérieure.
Utilisez simplement ce thème dans onCreateDialog () comme ceci:
android.R.style.Theme_Black_NoTitleBar_Fullscreen - Voici le code source de ce thème que vous pouvez voir que ce thème suffit à faire apparaître DialogFragment en plein écran.
S'il vous plaît laissez-moi savoir si quelqu'un est confronté à un problème. J'espère que cela est utile. Merci :)
la source
La méthode suivante fonctionnera même si vous travaillez sur une mise en page relative. Suivez les étapes suivantes:
Allez dans styles.xml puis sous le thème que vous venez d'ajouter, ajoutez ces deux attributs:
Mon paramètre de thème pour la boîte de dialogue est le suivant:
Assurez-vous que le thème a un parent comme Theme.AppCompat.Dialog Une autre façon serait de simplement créer un nouveau style dans styles.xml et de le modifier selon le code ci-dessus.
Accédez à votre classe Fragment de dialogue et dans le méthode onCreate () , définissez le style de votre Dialog comme:
@Override public void onCreate (@Nullable Bundle savedInstanceState) {super.onCreate (savedInstanceState); setStyle (DialogFragment.STYLE_NORMAL, R.style.DialogTheme); }
la source
Ajoutez ceci ci-dessous les lignes dans le style de la boîte de dialogue plein écran.
la source
window.setLayout
ne suffit pas pour les appareils plus anciens.Voici ce que je fais:
la source
la source
Une solution en utilisant le nouveau
ConstraintLayout
consiste à envelopper leConstraintLayout
dans unLinearLayout
avec minHeight et minWidth fixés. Sans le wrapping, ConstraintLayout n'obtient pas la bonne taille pour le Dialog.la source
A travaillé pour moi à Kotlin,
la source
la solution suivante a fonctionné pour moi, une autre solution m'a donné un peu d'espace sur les côtés, c'est-à-dire pas en plein écran
Vous devez apporter des modifications aux méthodes onStart et onCreate
la source