8 Stimmen

Kann transparenten DialogFragment nicht anzeigen

Ich habe ein Dialogfragment, das so aussieht.

Bildbeschreibung hier eingeben

AlertDialog ad = builder.create();
Drawable d = new ColorDrawable(Color.BLACK);
d.setAlpha(130);
ad.getWindow().setBackgroundDrawable(d);

Dieser Code macht den Hintergrund halbtransparent. Aber ich habe immer noch einen weißen Bereich unten. Ich möchte den weißen Bereich loswerden und nur einen halbtransparenten Hintergrund haben.

Ich habe bereits viele Dinge ausprobiert, die ich in anderen Beiträgen gesehen habe.

Ich weiß nicht, welches Objekt ich zwischen dem Dialogfragment, dem AlertDialog und dem LinearLayout ändern muss.

Es könnte nicht das LinearLayout sein, denn wenn ich den Rand vergrößere, bewegt sich nichts.

Hier ist mein Code:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
//      setStyle(DialogFragment.STYLE_NORMAL, 0);
//      setStyle(STYLE_NO_FRAME, R.style.CustomDialog);
//      setStyle(STYLE_NO_FRAME, 0);
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    View view = getActivity().getLayoutInflater().inflate(
            R.layout.share_or_die, null);

    AlertDialog ad = builder.create();
    Drawable d = new ColorDrawable(Color.BLACK);
    d.setAlpha(130);
    ad.getWindow().setBackgroundDrawable(d);
    ad.setCanceledOnTouchOutside(true);
    ad.getWindow().requestFeature(Window.FEATURE_NO_TITLE);

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

    return ad;

}

Ich rufe es nur in der MainActivity auf, wenn der Benutzer auf die Zurück-Taste klickt:

@Override
public void onBackPressed() {
        if (isUserConnected && !hasShared) {
        shareOnExitDialog = new ShareOnExitDialog();
            shareOnExitDialog.setCancelable(true);
            shareOnExitDialog.show(getSupportFragmentManager(), "Exit");
        } else {
            finish();
        }

}

Jede Hilfe wäre geschätzt!

25voto

sandrstar Punkte 12233

Das Problem liegt im Standarddialogdesign. Basierend auf dieser und dieser Antworten ist es viel einfacher, Ihr Ziel zu erreichen.

Die Aktivität sollte wie folgt aussehen:

public class MyActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);
    }

    @Override
    public void onBackPressed() {
        MyDialogFragment.newInstance("Titel").show(getSupportFragmentManager(), "dialog");
    }
}

Und das Fragment:

public class MyDialogFragment extends android.support.v4.app.DialogFragment {

    /**
     * Erstelle eine neue Instanz von MyDialogFragment und übergebe "Titel"
     * als Argument.
     */
    static MyDialogFragment newInstance(String title) {
        MyDialogFragment frag = new MyDialogFragment();
        Bundle args = new Bundle();

        args.putString("title", title);
        frag.setArguments(args);
        return frag;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Dialog dialog = new Dialog(getActivity(),android.R.style.Theme_Translucent_NoTitleBar);
        final View view = getActivity().getLayoutInflater().inflate(R.layout.share_or_die, null);

        final Drawable d = new ColorDrawable(Color.BLACK);
        d.setAlpha(130);

        dialog.getWindow().setBackgroundDrawable(d);
        dialog.getWindow().setContentView(view);

        final WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
        params.width = WindowManager.LayoutParams.WRAP_CONTENT;
        params.height = WindowManager.LayoutParams.WRAP_CONTENT;
        params.gravity = Gravity.CENTER;

        dialog.setCanceledOnTouchOutside(true);

        return dialog;
    }
}

Vergewissern Sie sich auch, dass Sie Folgendes tun: Vor setContentView() in der Aktivität sollte getWindow().requestFeature(Window.FEATURE_NO_TITLE) hinzugefügt werden, um den Stil *NoTitleBar zu verwenden.

Das Ergebnis ist (ich habe LinearLayout mit einem einzelnen TextView innen verwendet): Bildbeschreibung hier eingeben

12voto

dinus Punkte 141

Ich hoffe, es kann Ihnen helfen

@Override
public void onStart() {
    super.onStart();

    Window window = getDialog().getWindow();
    WindowManager.LayoutParams windowParams = window.getAttributes();
    windowParams.dimAmount = 0.0f; 

    window.setAttributes(windowParams);
}

2voto

user6388032 Punkte 125

Keine der oben genannten Lösungen hat bei mir funktioniert. Was für mich funktioniert hat, war sicherzustellen, dass ich android.support.v7.app.AlertDialog importiert habe, anstatt der allgemeinen app.alertdialog.

Ich hoffe, das hilft auch anderen.

1voto

namanh11611 Punkte 57

Es funktioniert für mich:

getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X