Как реализовать пользовательское Представление AlertDialog

В документах 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();

105
задан computingfreak 25 November 2016 в 02:39
поделиться

1 ответ

Вы правы, это потому, что вы не накачивали его вручную. Похоже, вы пытаетесь «извлечь» идентификатор «body» из макета Activity, и это не сработает.

Вы, вероятно, захотите что-то вроде этого:

LayoutInflater inflater = getLayoutInflater();
FrameLayout f1 = (FrameLayout)alert.findViewById(android.R.id.body);
f1.addView(inflater.inflate(R.layout.dialog_view, f1, false));
47
ответ дан 24 November 2019 в 03:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: