2011-12-16 33 views
7

Idea tomada de Android: Blurring and dimming background windows from dialog. Tengo problemas para difuminar el contenido de mi cuadro de diálogo. Al llamar eula.getWindow() recibo este error:El método getWindow() no está definido para el tipo AlertDialog.Builder

The method getWindow() is undefined for the type AlertDialog.Builder

el EULA se muestra con este bit 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); 

} 

Respuesta

11

getWindow() es un método de la clase de diálogo, no de la constructora de diálogo. El código debería ser más bien se parece a esto:

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

en cuenta sin embargo que la constante FLAG_BLUR_BEHIND ahora está en desuso, borrando detrás de las ventanas es no longer supported. Entonces su código podría romperse en el futuro.

+0

Funcionó como se describe. Gracias. Además, gracias por el enlace de referencia a la constante obsoleta. Lo hará por ahora, pero creo que tengo algo que hacer si quiero mantener esa característica en el futuro. –

5

eula es el generador, no el diálogo en sí. Proveedores:

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

Aunque ambas respuestas son correctas; La respuesta de alextsc se ajustaba mejor a mi código. Gracias por la rápida respuesta. –

+0

No se preocupe, hicimos nuestras respuestas exactamente al mismo tiempo :) – Guillaume

Cuestiones relacionadas