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.
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://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
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");
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 );
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>
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);
}
}
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;
}
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);
<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);
}
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!
Pour un dialogue en plein écran, j'ai posté une réponse
S'il vous plaît, vérifiez que c'est le moyen le plus efficace et le plus court ...
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