В документах Android о AlertDialog это дает следующие инструкции и пример для установки пользовательского представления в AlertDialog:
Если Вы хотите отобразить более сложное представление, искать FrameLayout, названный "телом" и добавить Ваше представление к нему:
FrameLayout fl = (FrameLayout) findViewById(R.id.body);
fl.add(myView, new LayoutParams(FILL_PARENT, WRAP_CONTENT));
Прежде всего это довольно очевидно это add()
опечатка и предназначена, чтобы быть addView()
.
Я смущен первой строкой с помощью R.id.body. Кажется, что это - элемент тела AlertDialog..., но я не могу только ввести это в свой код b/c, это дает ошибку компиляции. Где R.id.body становится определенным или присвоенным или безотносительно?
Вот мой код. Я пытался использовать setView(findViewById(R.layout.whatever)
на разработчике, но это не работало. Я принимаю, потому что я вручную не расширял его?
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();
Вы правы, это потому, что вы не накачивали его вручную. Похоже, вы пытаетесь «извлечь» идентификатор «body» из макета Activity, и это не сработает.
Вы, вероятно, захотите что-то вроде этого:
LayoutInflater inflater = getLayoutInflater();
FrameLayout f1 = (FrameLayout)alert.findViewById(android.R.id.body);
f1.addView(inflater.inflate(R.layout.dialog_view, f1, false));