web-dev-qa-db-fra.com

Le plein écran de DialogFragment montre le remplissage des côtés

Je crée un DialogFragment personnalisé qui est affiché sous la barre d'actions. Jusqu'ici tout fonctionne très bien. Les paramètres de présentation du fragment de boîte de dialogue sont match_parent pour la largeur et wrap_content pour la hauteur. 

J'ai essayé toutes les solutions, y compris la définition des paramètres de mise en page .width, en obtenant Taille d'affichage et en supprimant les thèmes. Cependant, peu importe ce qui reste invisible sur la gauche, la droite et le haut de la boîte de dialogue, il reste un petit espace. J'ai besoin de savoir comment supprimer cet espace afin qu'il corresponde à la largeur de l'écran et, si tout va bien, à supprimer également le rembourrage supérieur.

27
ahmad

Je l'ai compris en utilisant un thème de dialogue personnalisé. windowIsFloating true supprime l'arrière-plan mais ajoute un espace supplémentaire sous l'arrière-plan en tant qu'arrière-plan. Dans ce cas, vous pouvez utiliser windowBackground @null pour l’effacer.

<style name="CustomDialog" parent="@Android:style/Theme.Holo.Light" >
    <item name="Android:windowBackground">@null</item>
    <item name="Android:windowIsFloating">true</item>
</style

Merci à Raghunandan qui m'a donné le lien qui inclut tous les attributs de style. Cela m'a pris un certain temps, mais j’ai parcouru ce dossier et trouvé des éléments très intéressants. Consultez le lien ci-dessous pour explorer les styles de thèmes.

https://Android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/resources/themes.xml

29
ahmad

https://groups.google.com/forum/#!topic/Android-developers/NDFo9pF8sHY

De la suggestion de Dianne Hackborn

Utilisez un thème non dialogué comme Android.R.style.Theme ou Android.R.style.Theme_Light.

Regardez @ les thèmes

https://Android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/resources/themes.xml .

Vérifiez ce lien

http://developer.Android.com/reference/Android/app/DialogFragment.html

DialogFragment picker = MyDialogFragment.newInstance();
picker.setStyle( DialogFragment.STYLE_NORMAL, Android.R.style.Theme );
picker.show(getFragmentManager(), "MyDialogFragment");
12
Raghunandan

si vous définissez ce thème dans votre dialogue, il sera toujours en plein écran

<!-- DIALOG STYLE -->
<style name="You.Dialog" parent="Android:Theme.Holo.Dialog" >
    <item name="Android:windowNoTitle">true</item>
    <item name="Android:windowFullscreen">true</item>
    <item name="Android:windowIsFloating">false</item>
</style>

pour ce faire, vous pouvez utiliser cette méthode setStyle (int, int) .

dialogFragment.setStyle( DialogFragment.STYLE_NORMAL, R.style.You_Dialog );
8
Mario Lenci

Cela a fonctionné pour moi avec le support de <API 11.

Créez un style à la fois plein écran et sur fond transparent:

<style name="TransparentDialog" parent="@Android:style/Theme">
<item name="Android:windowBackground">@Android:color/transparent</item>
<item name="Android:background">@Android:color/transparent</item>
</style>

Ensuite, votre code DialogFragment:

public class MyDialog extends DialogFragment {

     public static MyDialog newInstance() {
         MyDialog dialog = new MyDialog();
         dialog.setStyle(DialogFragment.STYLE_NO_FRAME, R.style.TransparentDialog);
         return dialog;
     }

     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.my_custom_layout, container, false);
        return view;
    }
}

Enfin, pour plus de clarté, le contenu de my_custom_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res/com.kabx"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="@color/semi_transparent_grey" >

..........................
..Whatever You Want Here..
..........................

</RelativeLayout>
6
andrew

J'ai déjà rencontré le problème: il y a toujours un bourrage en mode plein écran. essayez ce code dans la méthode onActivityCreated () de dialogFragment:

public void onActivityCreated(Bundle savedInstanceState)
{   
    Window window = getDialog().getWindow();
    LayoutParams attributes = window.getAttributes();
    //must setBackgroundDrawable(TRANSPARENT) in onActivityCreated()
    window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    if (needFullScreen)
    {
        window.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    }
}
4
ruidge

Tout d'abord, vous devez savoir que la gestion du plein écran dans un fragment de dialogue est différente du composant Dialog normal, deuxièmement, vous devez personnaliser le fragment de dialogue avant la création réelle du dialogue @ (OnCreateDialog), en fonction de la réponse de "user3244180" Full screen DialogFragment

 @Override
 public Dialog onCreateDialog(final Bundle savedInstanceState) {

     // the content
     final RelativeLayout root = new RelativeLayout(getActivity());
     root.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

     // creating the fullscreen dialog
     final Dialog dialog = new Dialog(getActivity());
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
     dialog.setContentView(root);
     dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
     dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

     return dialog;
 }
4
Ayman Mahgoub

DialogFragment (quand cela n’est pas dit explicitement), utilisera ses styles internes qui encapsuleront votre mise en page personnalisée (pas d’écran plein écran, etc.).

Pas besoin de créer un thème personnalisé pour ce problème. Utilisez simplement cette méthode et définissez le style et le thème de votre choix:

/* theme is optional, I am using leanback... */
setStyle(STYLE_NORMAL, R.style.AppTheme_Leanback);
1
arenaq
<style name="WideDialog" parent="Theme.AppCompat.Light.DialogWhenLarge">
        <item name="Android:windowNoTitle">true</item>
        <item name="Android:windowFullscreen">false</item>
        <item name="Android:windowIsFloating">false</item>
    </style>

@Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(DialogFragment.STYLE_NORMAL, R.style.WideDialog);
    }
0
rajesh vinew

Ce qui suit fonctionne parfaitement pour moi. Cela me permet d'avoir un dialogue pleine largeur (remplit la largeur de l'écran sans remplissage), mais avec wrap_content pour la hauteur, et il conserve tous mes autres styles que je fais dans mon constructeur:

<style name="DialogTheme">

    <item name="windowMinWidthMajor">100%</item>
    <item name="windowMinWidthMinor">100%</item>

    <item name="Android:windowBackground">@null</item>
    <item name="Android:windowIsFloating">true</item>

    <item name="Android:background">#ffffff</item>

</style>

L'arrière-plan est requis ou bien cela fait une répétition bizarre, mais définissez-le simplement sur la couleur souhaitée pour l'arrière-plan de votre boîte de dialogue. WindowBackground et WindowIsFloating sont nécessaires pour que la taille soit correctement renvoyée à la ligne.

Ajoutez votre thème à votre constructeur comme suit:

builder = new AlertDialog.Builder(_context, R.style.DialogTheme);

et vous êtes prêt à partir!

0
Elliptica

Pour un dialogue en plein écran, j'ai posté une réponse 

Dans ce fil

S'il vous plaît, vérifiez que c'est le moyen le plus efficace et le plus court ...

0
Biswajit

Je commençais à avoir un énorme remplissage latéral dans le DialogFragment pour Nexus 6p et Pixel.

Corrigé cela en définissant un style personnalisé comme suit:

<style name="Custom.Dialog" parent="Android:Theme.DeviceDefault.Dialog.NoActionBar.MinWidth" >
        <item name="Android:windowBackground">@null</item>
        <item name="Android:windowIsFloating">true</item>
</style>

parent = "Android: Theme.DeviceDefault.Dialog.NoActionBar.MinWidth a fait le tour

0
Retr0spect101