按钮下方的AlertDialog布局

时间:2017-09-15 19:08:06

标签: android android-layout layout alertdialog

我有自己的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 个答案:

答案 0 :(得分:0)

您可以使用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"/>

并在MainActivity中定义takePicture方法:

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();
}