Метод setView() класса AlertDialog позволяет указать пользовательское представление для диалогового окна. Существуют ли какие-либо ограничения в отношении того, какие элементы управления могут быть включены в это пользовательское представление?
setView()
метод AlertDialog.Builder принимает любой класс простиралась от View (см это суб-классы и их суб-классы).
Это означает EditTexts, Buttons и т. Д. Но также макеты, которые простираются от viewGroups.
Кроме того, если мы установим пользовательский вид, можем ли мы добавлять кнопки, используя setPositiveButton, setNegativeButton и т. Д.?
Да, это влияет только на организм. Кнопки добавляются ниже макета.
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Get the layout inflater
LayoutInflater inflater = getLayoutInflater();
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog
// layout
builder.setView(inflater.inflate(R.layout.YourLayout, null))
.setPositiveButton(AlertDialog.BUTTON_NEGATIVE, "Yes!",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
//
}
})
.setNegativeButton(AlertDialog.BUTTON_NEGATIVE, "Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
LoginDialogFragment.this.getDialog().cancel();
}
});
return builder.create();
}
UPDATE:
Этот ответ, кажется, чтобы получить какую-то новую деятельность с 2-х лет назад, и некоторые вещи изменились.
Я немного обновил код, чтобы улучшить форматирование, и добавил следующий совет из-за текущего состояния лучших практик.
AlertDialog определяет стиль и структуру вашего диалога, но вы должны использовать DialogFragment в качестве контейнера для вашего диалога. Класс DialogFragment предоставляет все элементы управления, необходимые для создания вашего диалога и управления его внешним видом, вместо вызова методов в объекте Dialog.
Приведенный выше пример подразумевается, когда вы расширяете DialogFragment и создаете AlertDialog в методе обратного вызова onCreateDialog().
Я пытаюсь следовать ответ здесь. Однако всякий раз, когда я вхожу в строку 'LayoutInflater inflater = getLayoutInflater();' всегда получаю сообщение о том, что вызов метода требует параметра ** Bundle **. Я попытался использовать saveInstanceState из параметров onCreateDialog, но это вызвало новые ошибки. – Brian
Возможно, вы находитесь внутри фрагмента и нуждаетесь в 'getActivity(). GetLayoutInflater()' или 'LayoutInflater.from (getActivity())' – Timmetje