2011-12-16 16 views
7

Pomysł zaczerpnięty z Android: Blurring and dimming background windows from dialog. Mam problemy z wyświetlaniem treści w moim oknie dialogowym, aby się rozmyć. Dzwoniąc eula.getWindow() otrzymuję ten błąd:Metoda getWindow() jest niezdefiniowana dla typu AlertDialog.Builder

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

EULA jest wyświetlany z tego kawałka kodu z głównej działalności:

EulaHelper.showEula(false, this); 

Każda pomoc jest mile widziana.

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

} 

Odpowiedz

11

getWindow() to metoda klasy dialogowej, a nie konstruktora okien dialogowych. Kod powinien raczej wyglądać następująco:

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

Zauważ jednak, że stała FLAG_BLUR_BEHIND jest przestarzała teraz, zacierając za oknami jest no longer supported. Twój kod może się zepsuć w przyszłości.

+0

Praca zgodnie z opisem. Dziękuję Ci. Dziękuję również za link referencyjny do wycofanej stałej. Zrobimy to na razie, ale myślę, że mam trochę do zrobienia, jeśli chcę zachować tę funkcję. –

5

eula jest Builder, a nie sam dialog. Wypróbuj:

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

Podczas gdy obie odpowiedzi są poprawne; Odpowiedź alextsc lepiej pasuje do mojego kodu. Dziekuje za szybką odpowiedź. –

+0

Nie martw się, odpowiedzieliśmy dokładnie w tym samym czasie :) – Guillaume

Powiązane problemy