Ich muss einen Dialog über ein Fragment erstellen (das den gesamten Bildschirm einnimmt). Der Dialog muss ein schwebender Dialog sein, der über dem Fragment positioniert wird, wobei das Fragment außerhalb des Fragments abgedunkelt ist.
Für den benutzerdefinierten Dialog habe ich ein lineares Layout mit gekrümmten Kanten, egal was ich mache, der Dialog hat an allen Seiten einen schwarzen Rand (sehr klein). Ich habe alles versucht, um es transparent zu machen und wegzugehen (so dass der gesamte Dialog nur das lineare Layout ist - gebogenes Feld)
Für das DialogFragment habe ich dies für 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 ist nur ein LinearLayout, für das android: backgroung auf # 000000 gesetzt ist
Dies ist mein Stil für den benutzerdefinierten Dialog
<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>
Ich habe alle Arten von Kombinationen in diesem Stil ausprobiert (von dem, was ich online gesehen habe) und ich kann diesen nervigen schwarzen Rand nicht loswerden. Ich kann ihn weiß oder in einer anderen Farbe malen, wenn ich diesen LinearLayout-Hintergrund auf etwas anderes als setze # 000000 ...
Ich habe buchstäblich 3-4 Stunden damit verbracht, ich hoffe, jemand anderes kann helfen ...
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);
stattdessen auch anrufen . Damit dies keine Ausnahme auslöst, sollten Sie eine MethodeDialogFragment
von Activity oder Fragment through aufrufendialogFragment.show(...);
, nicht die von FragmentTransactionadd
.dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
.Versuchen Sie dies ( So erstelle ich ein 100% benutzerdefiniertes DialogFragment ) für diese Arbeit für den Dialog
quelle
Stellen Sie Ihr Thema so ein, dass es für mich funktioniert hat
Und in Ihrem Dialogfragment so einstellen
quelle
Im
onActivityCreated
für
DialogFragment
transparentquelle
Für eine vollständig transparente Verwendung: setStyle (DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
Für benutzerdefinierten Hintergrund: Erstellen Sie eine Stildatei in Ihrem Werteordner (values / style.xml) und verwenden Sie sie: setStyle (DialogFragment.STYLE_NO_FRAME, yourpackagename.R.style.YOURE_CUSTOM_STYLE);
Überschreiben Sie in Ihrer Stildatei atribute: android: windowBackground , um @ color / DialogBackgroundBlackSemiTransparent zu sein
quelle
Sie können dies erreichen, indem Sie dies in Dialog Fragment oder BottomSheetDialogFragment hinzufügen
In
onCreateDialog
Methodequelle
setBackgroundDrawableResource
undclearFlags
arbeitet für mich (kotlin, android api v28)quelle
Diejenigen, die den AlertDialog-Builder
onCreateDialog
anstelle vononCreateView
verwenden, können Themen wie den folgenden Code zuweisen. Ein vollständiger Themensatz ist bei R.style erhältlich . Vergessen Sie nicht, dass einige von ihnen kürzlich unterstützt wurden und auf alten Gerätetelefonen nicht verfügbar sind.quelle
Versuchen Sie dies, wenn Sie möchten:
quelle
Pro akzeptierter Antwort in Kotlin
quelle