Nos documentos do Android em AlertDialog , ele fornece a seguinte instrução e exemplo para definir uma visualização personalizada em um AlertDialog:
Se você deseja exibir uma visão mais complexa, procure o FrameLayout chamado "corpo" e adicione sua visão a ele:
FrameLayout fl = (FrameLayout) findViewById(R.id.body);
fl.add(myView, new LayoutParams(FILL_PARENT, WRAP_CONTENT));
Em primeiro lugar, é bastante óbvio que add()
é um erro de digitação e é para ser addView()
.
Estou confuso com a primeira linha usando R.id.body. Parece que é o elemento do corpo do AlertDialog ... mas eu não posso simplesmente inserir isso no meu código b / c dá um erro de compilação. Onde R.id.body é definido ou atribuído ou qualquer outra coisa?
Aqui está meu código. Tentei usar setView(findViewById(R.layout.whatever)
no construtor mas não funcionou. Estou supondo porque não inflou manualmente?
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Title")
.setCancelable(false)
.setPositiveButton("Go", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
EditText textBox = (EditText) findViewById(R.id.textbox);
doStuff();
}
});
FrameLayout f1 = (FrameLayout)findViewById(R.id.body /*CURRENTLY an ERROR*/);
f1.addView(findViewById(R.layout.dialog_view));
AlertDialog alert = builder.create();
alert.show();
.setView(getLayoutInflater().inflate(R.layout.dialog_view, null))
ao construtor. Crédito a Sergio Viudes, abaixo.