Saya perlu membuat dialog di atas sebuah fragmen (yang menempati seluruh layar). Dialog tersebut harus berupa dialog mengambang yang akan ditempatkan di atas fragmen dengan fragmen digelapkan di luar fragmen ..
Untuk Dialog kustom, saya memiliki linearLayout yang memiliki tepi melengkung, apa pun yang saya lakukan, dialog tersebut memiliki batas hitam di semua sisi (sangat kecil). Saya sudah mencoba segalanya untuk membuatnya transparan dan pergi (sehingga semua dialog hanyalah tata letak linier - kotak melengkung)
Untuk DialogFragment, inilah yang saya miliki untuk onCreateView
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
LinearLayout layout =(LinearLayout)inflater.inflate(R.layout.custom_dialog, null);
LinearLayout item = (LinearLayout)layout.findViewById(R.id.display_item);
populateItemData(item, inflater);
return layout;
}
custom_dialog hanyalah LinearLayout yang memiliki android: backgroung disetel ke # 000000
Ini adalah gaya saya untuk Dialog kustom
<style name="CustomDialog" parent="android:style/Theme.Dialog">
<item name="android:windowBackground">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:alwaysDrawnWithCache">false</item>
<item name="android:windowContentOverlay">@null</item>
</style>
Saya mencoba semua jenis kombinasi dalam gaya ini (dari apa yang pernah saya lihat secara online) dan saya tidak dapat menghilangkan batas hitam yang mengganggu itu, saya dapat mengecatnya dengan warna putih atau warna lain jika saya mengatur latar belakang LinearLayout itu ke apa pun selain # 000000 ...
Saya telah menghabiskan waktu 3-4 jam untuk ini, saya harap orang lain dapat membantu ...
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window android.app.Dialog.getWindow()' on a null object reference
.getDialog().getWindow().setBackgroundDrawableResource(android.R.color.transparent);
sebagai gantinya. Agar ini tidak meminta pengecualian, Anda harus memanggilDialogFragment
dari Activity atau Fragment throughdialogFragment.show(...);
method, bukan FragmentTransaction'sadd
.dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
.Coba ini ( Cara membuat DialogFragment kustom 100% ) ini berfungsi untuk dialog
sumber
Setel tema Anda seperti ini berhasil untuk saya
Dan dalam fragmen dialog Anda atur seperti ini
sumber
Di
onActivityCreated
untuk
DialogFragment
transparansumber
Untuk penggunaan yang sepenuhnya transparan: setStyle (DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
Untuk latar belakang kustom -buat file gaya di folder nilai Anda (values / style.xml) dan gunakan: setStyle (DialogFragment.STYLE_NO_FRAME, nama paketAnda.R.style.YOURE_CUSTOM_STYLE);
dalam file gaya Anda, timpa atribute: android: windowBackground menjadi @ color / DialogBackgroundBlackSemiTransparent
sumber
Anda dapat melakukannya dengan menambahkan ini di Dialog Fragment atau BottomSheetDialogFragment
Dalam
onCreateDialog
Metodesumber
setBackgroundDrawableResource
danclearFlags
bekerja untuk saya (kotlin, android api v28)sumber
Mereka yang menggunakan pembuat AlertDialog
onCreateDialog
alih-alihonCreateView
dapat menetapkan tema seperti kode berikut. Kumpulan tema lengkap dapat ditemukan dari R.style . Jangan lupa bahwa beberapa di antaranya didukung baru-baru ini dan tidak tersedia di ponsel perangkat lama.sumber
Coba ini jika Anda suka:
sumber
Sesuai jawaban yang diterima, di Kotlin
sumber