J'ai besoin de créer une boîte de dialogue sur un fragment (qui occupe tout l'écran). La boîte de dialogue doit être une boîte de dialogue flottante qui sera positionnée sur le fragment avec le fragment assombri à l'extérieur du fragment.
Pour la boîte de dialogue personnalisée, j'ai une mise en page linéaire qui a des bords incurvés, peu importe ce que je fais, la boîte de dialogue a une bordure noire de tous les côtés (très petite). J'ai tout essayé pour le rendre transparent et disparaître (pour que toute la boîte de dialogue soit juste la disposition linéaire - boîte courbe)
Pour le DialogFragment, voici ce que j'ai pour onCreateView
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
LinearLayout layout =(LinearLayout)inflater.inflate(R.layout.custom_dialog, null);
LinearLayout item = (LinearLayout)layout.findViewById(R.id.display_item);
populateItemData(item, inflater);
return layout;
}
custom_dialog est juste un LinearLayout qui a android: backgroung défini sur # 000000
C'est mon style pour la boîte de dialogue personnalisée
<style name="CustomDialog" parent="android:style/Theme.Dialog">
<item name="android:windowBackground">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:alwaysDrawnWithCache">false</item>
<item name="android:windowContentOverlay">@null</item>
</style>
J'ai essayé toutes sortes de combinaisons dans ce style (d'après ce que j'ai vu en ligne) et je ne peux pas me débarrasser de cette bordure noire ennuyeuse, je peux la peindre en blanc ou dans toute autre couleur si je règle cet arrière-plan LinearLayout sur autre chose que # 000000 ...
J'ai passé littéralement 3-4 heures là-dessus, j'espère que quelqu'un d'autre pourra m'aider ...
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window android.app.Dialog.getWindow()' on a null object reference
.getDialog().getWindow().setBackgroundDrawableResource(android.R.color.transparent);
place. Pour ne pas invoquer d'exception, vous devez appeler une méthodeDialogFragment
from Activity ou Fragment throughdialogFragment.show(...);
, pas celle de FragmentTransactionadd
.dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
.Essayez ceci ( Comment créer un DialogFragment personnalisé à 100% ) ce travail pour le dialogue
la source
Définissez votre thème comme cela a fonctionné pour moi
Et dans votre ensemble de fragments de dialogue comme ceci
la source
Dans
onActivityCreated
pour
DialogFragment
transparentla source
Pour une utilisation totalement transparente: setStyle (DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
Pour un arrière-plan personnalisé, créez un fichier de style dans votre dossier de valeurs (values / style.xml) et utilisez-le: setStyle (DialogFragment.STYLE_NO_FRAME, yourpackagename.R.style.YOURE_CUSTOM_STYLE);
dans votre fichier de style, remplacez l'attribut: android: windowBackground to be @ color / DialogBackgroundBlackSemiTransparent
la source
Vous pouvez y parvenir en ajoutant ceci dans Dialog Fragment ou BottomSheetDialogFragment
Dans la
onCreateDialog
méthodela source
setBackgroundDrawableResource
etclearFlags
fonctionne pour moi (kotlin, api android v28)la source
Ceux qui utilisent le générateur AlertDialog au
onCreateDialog
lieu deonCreateView
peuvent attribuer un thème comme le code suivant. Un ensemble complet de thèmes peut être trouvé à partir de R.style . N'oubliez pas que certains d'entre eux ont récemment pris en charge et ne sont pas disponibles sur les anciens téléphones.la source
Essayez ceci si vous aimez:
la source
Par réponse acceptée, à Kotlin
la source