AlertDialog Layout под кнопками

У меня есть свой собственный макет для AlertDialog, и если я использую setPositiveButton, все работает. Но когда я использую setItems, мой макет отображается под кнопками элемента.

Как я могу показать мой пользовательский макет сверху?

Вот мой код:

       private void selectImage(){
final CharSequence[] items = { TAKE_PICTURE, FROM_GALLERY, CANCLE};
            AlertDialog.Builder builder = new AlertDialog.Builder(Add_Object.this);
            LayoutInflater inflater = this.getLayoutInflater();
            View content =  inflater.inflate(R.layout.alert_dialog, null);
            builder.setView(content);
            ((TextView) content.findViewById(R.id.dialogTitle)).setText(R.string.addPictureTitle);
             builder.setItems(items, new DialogInterface.OnClickListener(){
                @Override
                public void onClick(DialogInterface dialog, int item) {
                    if (items[item].equals(TAKE_PICTURE)) {
                            captureImage();
                    } else if (items[item].equals(FROM_GALLERY)) {
                            chooseFromGallery();
                    } else if (items[item].equals(CANCLE)) {
                        dialog.dismiss();
                    }
                }
            });
            builder.show();
        }
    }

И мой макет:

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <TextView
        android:id="@+id/dialogTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="15dp"
        android:layout_marginBottom="15dp"
        android:textSize="25sp"
        android:textColor="@color/main_color"/>

    <View
        android:layout_width="match_parent"
        android:id="@+id/dialogDivider"
        android:layout_below="@id/dialogTitle"
        android:layout_height="2dp"
        android:background="@color/main_color" />

    <TextView
        android:id="@+id/dialogText"
        android:layout_below="@+id/dialogDivider"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:textSize="18sp"
        android:textColor="@color/darkgrey"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

Заранее спасибо.

1 ответ

Ты можешь использовать builder.setCustomTitle(content) вместо setView(content), но это добавит разделительную линию между вашим макетом и кнопками элемента...

РЕДАКТИРОВАТЬ:
В качестве альтернативы вы можете добавить список в свой пользовательский макет, например, с помощью TextView, например:

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/take_picture"
    android:layout_below="@id/dialogText"
    android:layout_marginLeft="20dp"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"
    android:textSize="26sp"
    android:onClick="takePicture"/>

и определите метод takePicture в вашей MainActivity:

public void takePicture(View view) {
    Log.i("MainActivity", "take picture");
    //cancel the dialog
    dialog.dismiss();
}

диалог сохраняется в переменной класса и инициализируется в selectImage():

private void selectImage(){
    final CharSequence[] items = {  "TAKE_PICTURE", "FROM_GALLERY", "CANCLE"};
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    LayoutInflater inflater = this.getLayoutInflater();
    View title =  inflater.inflate(R.layout.alert_dialog, null);
    builder.setView(title);
    ((TextView) title.findViewById(R.id.dialogTitle)).setText("picture title");
    ((TextView) title.findViewById(R.id.take_picture)).setText(items[0]);
    //init dialog
    dialog = builder.create();
    dialog.show();
}
Другие вопросы по тегам