Я пытаюсь создать AlertDialog
с пользовательским view
(без заголовка или нижнего колонтитула) и закругленными углами. Я видел много сообщений о том, как это сделать, и я много пробовал, но я не могу построить его, как я хочу.
Это моя цель:
Я создал drawable
для dialog
, называемого dialog_background.xml:
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid
android:color="#FFAAAAAA" />
<stroke
android:width="2dp"
android:color="#FF000000" />
<corners android:radius="20dp" />
</shape>
И я добавил style
, чтобы использовать его:
<style name="MyDialog" parent="@android:style/Theme.Dialog">
<item name="android:background">@drawable/dialog_background</item>
</style>
layout
layout
будет иметь две кнопки. Сейчас я покажу вам пустой LinearLayout
, чтобы сделать его простым. Это playdialog.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
style="@style/MyDialog"
>
</LinearLayout>
Чтобы построить dialog
, я использую DialogFragment
. Это его функция onCreateDialog
:
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.playdialog, null));
return builder.create();
}
Хорошо, если я использую такой код, я получаю следующее:
Я попытался установить фон dialog
прозрачным, изменив код DialogFragment
:
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.playdialog, null));
**NEW**
Dialog d = builder.create();
d.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
return d;
}
Результат точно такой же, поэтому я понял, что этот белый прямоугольник под моим dialog
является из моего пользовательского view
, а не из dialog
. Я уже устанавливаю свой фон view
в dialog_background.xml, поэтому я не могу установить его прозрачно или потерять углы, цвет и т.д.
Затем я решил изменить фон dialog
, используя dialog_background.xml, и мое представление имеет сплошной цвет в качестве фона.
В моем пользовательском view
layout
(playdialog.xml) я заменил style = "@style/MyDialog" на:
android:background="#FFAAAAAA"
И затем в моем DialogFragment
я использовал этот код:
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
builder.setView(inflater.inflate(R.layout.playdialog, null));
**NEW**
Dialog d = builder.create();
d.getWindow().setBackgroundDrawableResource(R.drawable.dialog_background);
return d;
}
Это то, что я получаю:
Это почти то, что я хотел, но вы можете видеть мои пользовательские границы view
, поэтому он недостаточно хорош. В этот момент я не знал, что еще я могу сделать.
Кто-нибудь знает, как я могу его решить?
Спасибо!