2011-12-16 3 views
7

Идея взята с Android: Blurring and dimming background windows from dialog. У меня возникли проблемы с тем, чтобы содержимое в моем диалоговом окне размылось. При вызове eula.getWindow() Я получаю эту ошибку:Метод getWindow() не определен для типа AlertDialog.Builder

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

ЛСКП отображается с этим битом кода от основной деятельности:

EulaHelper.showEula(false, this); 

Любая помощь очень ценится.

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

} 

ответ

11

getWindow() является метод диалогового класса, а не в конструкторе. Ваш код должен скорее выглядеть следующим образом:

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

Примечание хотя, что константа FLAG_BLUR_BEHIND устарела сейчас, размытость за окнами no longer supported. Таким образом, ваш код может сломаться в будущем.

+0

Работали, как описано. Спасибо. Также, спасибо за ссылку ссылки на устаревшую константу. Это будет сделано до сих пор, но я думаю, что у меня есть некоторые чтения, если я хочу, чтобы эта функция продолжалась. –

5

eula является Строителем, а не самим диалогом. Попробуйте:

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

Хотя оба ответа верны; Ответ alextsc лучше соответствует моему коду. Спасибо вам за быстрый ответ. –

+0

Не беспокойтесь, мы точно ответили на наши вопросы :) – Guillaume

Смежные вопросы