Das benutzerdefinierte DialogFragment kann nicht über dem Fragment transparent gemacht werden

Lesezeit: 5 Minuten

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 wird.

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 zu verschwinden (so dass der gesamte Dialog nur das lineare Layout ist – gekrümmte Box)

Für das DialogFragment habe ich das 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, bei dem 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 möglichen Kombinationen in diesem Stil ausprobiert (nach dem, was ich online gesehen habe) und ich kann diesen störenden 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 …

Benutzer-Avatar
CD

Versuchen

getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

in deiner DialogFragment‘s onCreateView

  • Vielleicht möchten Sie auch den halbtransparenten schwarzen Hintergrund entfernen (Dimmen), überprüfen Sie diese Antwort: stackoverflow.com/a/33800422/2115904

    – Andri Bas

    18. April 2016 um 7:09 Uhr


  • Entfernt auch alle Ränder.. Dialog wird auf volle Breite erweitert.

    – Udayaditya Barua

    23. Juni 2016 um 13:56 Uhr

  • Und es wird eine Ausnahme verursachen: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window android.app.Dialog.getWindow()' on a null object reference.

    – CoolMind

    16. August 2016 um 14:10 Uhr

  • Sie können auch anrufen getDialog().getWindow().setBackgroundDrawableResource(android.R.color.transparent); stattdessen. Damit dies keine Ausnahme auslöst, sollten Sie a aufrufen DialogFragment von Aktivität oder Fragment durch dialogFragment.show(...); -Methode, nicht die von FragmentTransaction add.

    – CoolMind

    16. August 2016 um 15:32 Uhr

  • Falls jemand nach dem Kotlin-Snippet sucht, hier ist es: dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)).

    – Franz Laclé

    7. September 2019 um 15:35 Uhr

Benutzer-Avatar
sahar

Versuchen Sie dies (How to I create a 100% custom DialogFragment) diese Arbeit für den Dialog

    Dialog dialog = new Dialog(getActivity());

    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);

    dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);      

        // layout to display
    dialog.setContentView(R.layout.add_edit);

    // set color transpartent
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

    dialog.show();

Stellen Sie Ihr Thema so ein, dass es für mich funktioniert hat

<style name="MyDialog" parent="Base.Theme.AppCompat.Light.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

Und in Ihrem Dialogfragment so eingestellt

public class Progress extends DialogFragment {


int style = DialogFragment.STYLE_NO_TITLE;
int theme = R.style.MyDialog;

public Progress() {
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(style, theme);
}

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

Benutzer-Avatar
Sanghyun Byun

Im onActivityCreated

getDialog().getWindow().getAttributes().alpha = 0.9f; // An alpha value to apply to this entire window. An alpha of 1.0 means fully opaque and 0.0 means fully transparent

zum DialogFragment transparent

Sie können dies erreichen, indem Sie dies hinzufügen
Dialogfragment oder BottomSheetDialogFragment

Im onCreateDialog Methode

@Override
   public Dialog onCreateDialog(Bundle savedInstanceState) {
       Dialog dialog = super.onCreateDialog(savedInstanceState);
       dialog.getWindow().setGravity(Gravity.BOTTOM);
       dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
       dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
       return dialog;
   }

  • setBackgroundDrawableResource und clearFlags funktioniert bei mir (kotlin, android api v28)

    – Wiely

    2. Oktober 2019 um 7:33 Uhr

Benutzer-Avatar
Benutzer3193413

Für völlig transparenten Einsatz:
setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);

Erstellen Sie für einen benutzerdefinierten Hintergrund eine Stildatei in Ihrem Werteordner (values/style.xml) und verwenden Sie sie:
setStyle(DialogFragment.STYLE_NO_FRAME, yourpackagename.R.style.YOURE_CUSTOM_STYLE);

in Ihrer Stildatei das Attribut überschreiben:
android:windowBackground sein @color/DialogBackgroundBlackSemiTransparent

  • setBackgroundDrawableResource und clearFlags funktioniert bei mir (kotlin, android api v28)

    – Wiely

    2. Oktober 2019 um 7:33 Uhr

Benutzer-Avatar
Nick Unuchek

<style name="BaseDialogTheme" parent="Base.Theme.AppCompat.Light.Dialog">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="colorControlNormal">@color/colorAccent</item>
    <item name="colorControlActivated">@color/colorAccent</item>

    <item name="android:windowFullscreen">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:colorBackground">@android:color/transparent</item>
    <item name="android:windowIsTranslucent">true</item>


    <item name="android:windowIsFloating">true</item>
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="android:windowActionModeOverlay">false</item>
    <item name="android:windowCloseOnTouchOutside">true</item>
    <item name="android:backgroundDimAmount">.00</item>//this line is changed alpha from 1.0 to 0.0(full transparent) 

</style>



@Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(STYLE_NO_FRAME, R.style.BaseDialogTheme);
    }

1329410cookie-checkDas benutzerdefinierte DialogFragment kann nicht über dem Fragment transparent gemacht werden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy