Что я пытаюсь сделать: я пытаюсь создать собственный диалог в android с закругленными углами.
Что происходит: я могу создать собственный диалог, но у него нет закругленных углов. Я попытался добавить селектор, но все равно не смог добиться закругленных углов.
Ниже мой код для того же:
Код Java:
private void launchDismissDlg() {
dialog = new Dialog(getActivity(), android.R.style.Theme_Dialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dlg_dismiss);
dialog.setCanceledOnTouchOutside(true);
Button btnReopenId = (Button) dialog.findViewById(R.id.btnReopenId);
Button btnCancelId = (Button) dialog.findViewById(R.id.btnCancelId);
btnReopenId.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
btnCancelId.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
dialog.setCanceledOnTouchOutside(false);
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
dialog.show();
}
xml-код:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:orientation="vertical" >
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TableRow
android:id="@+id/tableRow1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="center" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text=""I WOULD LIKE TO DISMISS THE VENDOR""
android:textColor="@color/col_dlg_blue_light"
android:textSize="14sp"
android:textStyle="bold" />
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="center" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="BECAUSE"
android:textColor="@android:color/black"
android:textStyle="bold" />
</TableRow>
<TableRow
android:id="@+id/tableRow4"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/btnReopenId"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@color/col_dlg_green_light"
android:text="REOPEN"
android:padding="5dp"
android:textSize="14sp"
android:textColor="@android:color/white"
android:textStyle="bold" />
<Button
android:id="@+id/btnCancelId"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@color/col_dlg_pink_light"
android:text="CANCEL"
android:padding="5dp"
android:textSize="14sp"
android:textColor="@android:color/white"
android:textStyle="bold" />
</TableRow>
</TableLayout>
</LinearLayout>
Ответы:
Создайте xml в drawable, скажем, dialog_bg.xml
установите его в качестве фона в вашем макете xml
Установите прозрачный фон корневого представления диалогового окна, поскольку Android помещает ваш макет диалогового окна в корневое представление, которое скрывает углы в вашем настраиваемом макете.
источник
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
это то, что не нравится в большинстве других тем SO! +1setBackgroundDrawable
кажется устаревшим ... есть альтернативы этому?dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
передsetContentView
Вам необходимо сделать следующее:
Создайте фон с закругленными углами для фона диалогового окна:
Теперь в XML-файле вашего диалога в корневом макете используйте этот фон с необходимым полем:
наконец, в части java вам нужно сделать это:
У меня это отлично работает.
источник
<corners android:radius="8dp"/>
, иначе вы получите проблемы с рендерингомPath.isConvex is not supported
это предупреждение, которое вы обычно получаете в своем макете, если используете фигуру с одинаковым значением для всех углов. stackoverflow.com/q/34736981/6605907dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
это работает для меня
источник
dimen.xml
styles.xml
dialog_title_style.xml
dialog_background.xml
dialog_one_button.xml
OneButtonDialog.java
источник
Я сделал новый способ без возможности рисования фона - сделать его родителем CardView и дать ему
app:cardCornerRadius="20dp"
а затем добавить это в класс javadialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Это еще один способ сделать это.
источник
Если вы используете компоненты материала :
CustomDialog.kt
styles.xml
источник
Вы можете использовать форму для фона как-
Посмотрите на это подробности.
источник
Самый простой способ - использовать из
источник
настройка
не позволит диалогу отбрасывать тень.
Решение - использовать
где R.drawable.dialog_ounded_background
источник
Для тех, кто любит делать что-то в XML, особенно если вы используете действия компонента архитектуры навигации для перехода к диалогам.
Ты можешь использовать:
источник
Вы можете просто использовать MaterialAlertDialogBuilder для создания настраиваемого диалогового окна с закругленными углами.
Сначала создайте стиль для диалогового окна материала следующим образом:
затем создайте объект Alert Dialog в классе Java следующим образом:
Это все, что вам нужно сделать.
источник
С помощью библиотеки Androidx и темы компонентов материала вы можете переопределить
getTheme()
метод:с участием:
Или вы можете использовать
MaterialAlertDialogBuilder
входящие в библиотеку компонентов материалов:с участием:
Если вам не нужен,
DialogFragment
просто используйтеMaterialAlertDialogBuilder
.источник
Вот полное решение, если вы хотите контролировать угловой радиус диалогового окна и сохранить тень высот
диалог:
макет dialog_options.xml:
Ключ состоит в том, чтобы обернуть CardView другой ViewGroup (здесь FrameLayout) и установить поля для создания пространства для тени высотной отметки.
источник
В Kotlin я использую класс DoubleButtonDialog.Java с
window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
важной строкойВ макете мы можем создать dialog_double_button.xml
затем используйте drawable.xml как
источник
Для уровня API> = 28 доступен атрибут
android:dialogCornerRadius
. Для поддержки предыдущих версий API необходимо использоватьгде dialog_bg.xml
источник