Android AlertDialog setView правила

Метод setView() класса AlertDialog позволяет указать настраиваемый вид для диалогового окна. Существуют ли какие-либо ограничения в отношении того, какие элементы управления могут быть включены в этот пользовательский режим?

Кроме того, если мы настроим пользовательский вид, можем ли мы добавлять кнопки с помощью setPositiveButton(), setNegativeButton() и т.д.

Ответ 1

Метод setView() класса AlertDialog позволяет указать настраиваемое представление для диалогового окна. Существуют ли какие-либо ограничения относительно того, какие элементы управления могут быть включены в это настраиваемое представление?

Метод setView() в AlertDialog.Builder принимает любой класс, расширенный из View (см. Его подклассы и их подклассы).

Это означает EditTexts, кнопки и т.д. Но также макеты, которые выходят из 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();
}

ОБНОВИТЬ:

Этот ответ, кажется, получил новую активность с 2 лет назад, и некоторые вещи изменились.

Я немного обновил код, чтобы улучшить форматирование, и добавил следующий совет из-за текущего состояния передового опыта.

AlertDialog определяет стиль и структуру вашего диалога, но вы должны использовать DialogFragment в качестве контейнера для вашего диалога. Класс DialogFragment предоставляет все элементы управления, необходимые для создания диалога и управления его внешним видом, вместо вызова методов объекта Dialog.

Приведенный выше пример предназначен для расширения DialogFragment и создания AlertDialog в onCreateDialog() обратного вызова onCreateDialog().

Ответ 2

В прилагаемой документации для AlertDialog нет ограничений на то, что вы могли бы установить в представлении AlertDialog.

Таким образом, пользовательский вид займет свое место под заголовком диалога и над кнопками, которые не будут затронуты вообще.

Ответ 3

Насколько я знаю, вы можете добавить что угодно в setView(). Позитивные/отрицательные кнопки не будут затронуты.

Ответ 4

ПЫТАЙТЕСЬ, ДАННЫЙ ПРИМЕР

  android.support.v7.app.AlertDialog.Builder adb =
    new android.support.v7.app.AlertDialog.Builder(YoreActivity.this);

  ViewGroup subView = (ViewGroup) getLayoutInflater().// inflater view
                      inflate(R.layout.yore_layout_alert, null, false);

  try {// set data of yore layout

     ((TextView) subView.findViewById(R.id.messageAlert))//get element TextView 
                                            .setText(SomeText);//set text

  } catch (NullPointerException npe) {
    npe.printStackTrace();
  }

  adb.setPositiveButton("textPOSITIVE", new DialogInterface.OnClickListener() {//one method go
    @Override
    public void onClick(DialogInterface dialog, int which) {
      //  TODO some code
    }
  });//one method end

  final android.support.v7.app.AlertDialog alertDialog =
        adb.setTitle(SomeText)// set ttile 
        .setView( subView ).create();// add view in AlertDialog.Builder, and create AlertDialog

  try { //two method go

    ((Button) subView.findViewById(R.id.customPositivButton))
    .setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        //  TODO some code
        alertDialog.dismiss();
      }
    });

  } catch (NullPointerException npe) {
    npe.printStackTrace();
  }  //two method end

  alertDialog.show(); //show in YoreActivity