Idea tomada de Android: el Desenfoque y la atenuación de fondo de las ventanas de diálogo. Estoy teniendo problemas para obtener el contenido en mi cuadro de diálogo desenfoque. Cuando se llama a cluf.getWindow() me aparece este error:

El método getWindow() está definido por el tipo de AlertDialog.El generador de

El eula se muestra con este trozo de código de la actividad principal:

    EulaHelper.showEula(false, this);

Cualquier ayuda es muy apreciada.

    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);

}

OriginalEl autor Bill Mote | 2011-12-16

2 Comentarios

  1. 15

    getWindow() es un método de la clase de diálogo, no de el cuadro de diálogo generador. El código debería tener este aspecto:

    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);

    Nota a pesar de que la FLAG_BLUR_BEHIND constante es obsoleto ahora, visión borrosa detrás de las ventanas es ya no es compatible. Por lo tanto el código se puede romper en el futuro.

    Funcionó como se describe. Gracias. También, gracias por el enlace de referencia a que el desuso constante. Lo voy a hacer por ahora, pero supongo que tengo algo que leer si quiero mantener la característica de ir hacia adelante.

    OriginalEl autor

  2. 5

    eula es el Constructor, no el propio diálogo. Probar:

    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);
    Mientras que ambas respuestas son correctas; alextsc la respuesta encaja con mi código mejor. Gracias por la rápida respuesta.
    No se preocupe, nosotros lo hicimos nuestras respuestas exactamente al mismo tiempo 🙂

    OriginalEl autor

Dejar respuesta

Please enter your comment!
Please enter your name here