8 votes

La méthode getWindow() n'est pas définie pour le type AlertDialog.Builder.

Idée tirée de Android : brouillage et atténuation des fenêtres d'arrière-plan à partir d'une boîte de dialogue . J'ai du mal à faire en sorte que le contenu de ma boîte de dialogue s'estompe. Lorsque j'appelle eula.getWindow(), je reçois cette erreur :

La méthode getWindow() n'est pas définie pour le type AlertDialog.Builder.

L'eula s'affiche avec ce bout de code de l'activité principale :

    EulaHelper.showEula(false, this);

Toute aide est la bienvenue.

    public static void showEula(final boolean accepted, final FragmentActivity activity) {
    AlertDialog.Builder eula = new AlertDialog.Builder(activity)
            .setTitle(R.string.eula_title)
            .setIcon(android.R.drawable.ic_dialog_info)
                .setMessage(activity.getString(R.raw.eula))
            .setCancelable(accepted);

    if (accepted) {
        // If they've accepted the EULA allow, show an OK to dismiss.
        eula.setPositiveButton(android.R.string.ok,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
    } else {
        // If they haven't accepted the EULA allow, show accept/decline buttons and exit on
        // decline.
        eula
                .setPositiveButton(R.string.accept,
                        new android.content.DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                setAcceptedEula(activity);
                                dialog.dismiss();
                            }
                        })
                .setNegativeButton(R.string.decline,
                        new android.content.DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.cancel();
                                activity.finish();
                            }
                        });
    }
    eula.show();
    WindowManager.LayoutParams lp = eula.getWindow().getAttributes();
    lp.dimAmount = 0.0F;
    eula.getWindow().setAttributes(lp);
    eula.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);

}

15voto

getWindow() est une méthode de la classe de dialogue, et non du constructeur de dialogue. Votre code devrait plutôt ressembler à ceci :

AlertDialog dlg = eula.show();
WindowManager.LayoutParams lp = dlg.getWindow().getAttributes();
lp.dimAmount = 0.0F;
dlg.getWindow().setAttributes(lp);
dlg.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);

Notez cependant que le FLAG_BLUR_BEHIND est maintenant déprécié, le flou derrière Windows est n'est plus supporté . Votre code pourrait donc se briser à l'avenir.

5voto

Guillaume Points 10121

eula est le Bâtisseur, et non la boîte de dialogue elle-même. Essayez :

final AlertDialog eulaDialog = eula.create();
eulaDialog.show();
WindowManager.LayoutParams lp = eulaDialog.getWindow().getAttributes();
lp.dimAmount = 0.0F;
eulaDialog.getWindow().setAttributes(lp);
eulaDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X