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