Apa yang saya coba lakukan: Saya mencoba membuat dialog khusus di android dengan sudut membulat.
Apa yang terjadi: Saya dapat membuat dialog khusus tetapi tidak memiliki sudut bulat. Saya mencoba menambahkan pemilih tetapi tetap saja saya tidak dapat mencapai sudut yang bulat.
Di bawah ini adalah kode saya untuk hal yang sama:
Kode 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();
}
kode 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>
Jawaban:
Buat xml di drawable, katakan dialog_bg.xml
mengaturnya sebagai latar belakang di tata letak Anda xml
Setel latar belakang tampilan akar dialog menjadi transparan, karena Android menempatkan tata letak dialog Anda dalam tampilan root yang menyembunyikan sudut-sudut dalam tata letak khusus Anda.
sumber
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
adalah apa yang hilang di sebagian besar utas SO lainnya! +1setBackgroundDrawable
tampaknya sudah usang ... ada alternatif untuk itu?dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
sebelumsetContentView
Anda perlu melakukan hal berikut:
Buat latar belakang dengan sudut bulat untuk latar belakang Dialog:
Sekarang di file XML Dialog Anda di tata letak root gunakan latar itu dengan margin yang diperlukan:
akhirnya di bagian java Anda perlu melakukan ini:
Ini bekerja dengan baik untuk saya.
sumber
<corners android:radius="8dp"/>
, jika tidak Anda akan mendapatkan masalah renderingPath.isConvex is not supported
ini adalah peringatan yang biasanya Anda dapatkan di tata letak Anda jika Anda menggunakan bentuk dengan nilai yang sama untuk semua sudut. stackoverflow.com/q/34736981/6605907dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
ini bekerja untuk saya
sumber
dimen.xml
styles.xml
dialog_title_style.xml
dialog_background.xml
dialog_one_button.xml
OneButtonDialog.java
sumber
Saya membuat cara baru tanpa latar belakang yang dapat digambar adalah yang membuatnya memiliki CardView sebagai orangtua dan memberikannya
app:cardCornerRadius="20dp"
lalu menambahkan ini di kelas javadialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Ini cara lain untuk membuatnya.
sumber
Jika Anda menggunakan Komponen Material :
CustomDialog.kt
styles.xml
sumber
Anda dapat menggunakan bentuk untuk latar belakang sebagai-
Lihat ini untuk detailnya.
sumber
Cara paling sederhana adalah menggunakan dari
sumber
Pengaturan
akan mencegah dialog untuk membuat bayangan.
Solusi adalah menggunakan
di mana R.drawable.dialog_rounded_background
sumber
Bagi siapa saja yang suka melakukan hal-hal dalam XML, khususnya dalam kasus di mana Anda menggunakan tindakan komponen arsitektur Navigasi untuk menavigasi ke dialog
Kamu bisa memakai:
sumber
Anda cukup menggunakan MaterialAlertDialogBuilder untuk membuat dialog khusus dengan sudut bulat.
Pertama buat gaya untuk dialog materi seperti ini:
lalu buat objek Dialog Peringatan di kelas Java seperti ini:
Itu semua yang perlu Anda lakukan.
sumber
Dengan pustaka Androidx dan Tema Komponen Bahan Anda dapat mengganti
getTheme()
metode:dengan:
Atau Anda dapat menggunakan yang
MaterialAlertDialogBuilder
disertakan dalam Perpustakaan Komponen Bahan:dengan:
Jika Anda tidak perlu
DialogFragment
hanya menggunakanMaterialAlertDialogBuilder
.sumber
Ini adalah solusi lengkap jika Anda ingin mengontrol radius sudut dialog dan mempertahankan bayangan elevasi
Dialog:
layout dialog_options.xml:
Kuncinya adalah membungkus CardView dengan ViewGroup lain (di sini FrameLayout) dan mengatur margin untuk membuat ruang bagi bayangan elevasi.
sumber
Di Kotlin, saya menggunakan kelas DoubleButtonDialog.Java dengan garis yang
window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
pentingDalam tata letak, kita dapat membuat dialog_double_button.xml
lalu gunakan drawable.xml sebagai
sumber
Untuk API level> = 28 atribut yang tersedia
android:dialogCornerRadius
. Untuk mendukung versi API sebelumnya perlu digunakandimana dialog_bg.xml
sumber