wake-up-neo.com

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

Ich muss einen Dialog über ein Fragment erstellen (der 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 zu verschwinden (so dass der gesamte Dialog nur das lineare Layout ist - gebogenes Kästchen)

Für das DialogFragment ist dies das, was ich für onCreateView habe

@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 mit Android: backgroung auf # 000000

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 diese lästigen schwarzen Ränder nicht loswerden. Ich kann es weiß oder in einer anderen Farbe malen, wenn ich den LinearLayout-Hintergrund auf etwas anderes als setze # 000000 ...

Ich habe buchstäblich 3-4 Stunden damit verbracht, ich hoffe, jemand anderes kann helfen ...

89
Tolga E

Versuchen

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

in Ihrem DialogFragment 's onCreateView

273
C.d.

Versuchen Sie dies ( Wie erstelle ich ein 100% benutzerdefiniertes DialogFragment? )

    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();
22
sahar

In 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

für DialogFragment transparent

10
Sanghyun Byun

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 setzen Sie so

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);
}
}
10
Ameen Maheen

Für eine vollständig transparente Verwendung: setStyle (DialogFragment.STYLE_NO_FRAME, Android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);

Für einen benutzerdefinierten Hintergrund erstellen Sie eine Stildatei in Ihrem Werteverzeichnis (values ​​/ style.xml) und verwenden diese: setStyle (DialogFragment.STYLE_NO_FRAME, yourpackagename.R.style.YOURE_CUSTOM_STYLE);

überschreiben Sie in Ihrer Stildatei den Attribut: Android: windowBackground, um @ color/DialogBackgroundBlackSemiTransparent zu sein

6
user3193413

Diejenigen, die den Builder für AlertDialog in onCreateDialog anstelle von onCreateView verwenden, können Themen wie den folgenden Code zuweisen. Ein vollständiges Themenset finden Sie unter R.style . Vergessen Sie nicht, dass einige von ihnen kürzlich unterstützt wurden und auf alten Telefonen nicht verfügbar sind.

@Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), Android.R.style.Theme_Translucent);
        View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_album, null);
        builder.setView(view);

        return builder.create();
    }
3
Hesam
<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);
    }
2
NickUnuchek

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

In 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;
   }
2
Nanda Gopal

Versuchen Sie dies, wenn Sie möchten:

public TransparentDialog()
{
    super();
    setStyle(STYLE_NO_FRAME, R.style.AppTheme);
}
1
Kitesurfer