Saya mencoba membuat dialog khusus di Android. Saya membuat Dialog saya seperti ini:
dialog = new Dialog(this);
dialog.setContentView(R.layout.my_dialog);
Semuanya berfungsi dengan baik kecuali untuk judul Dialog. Bahkan jika saya tidak menetapkan judul dialog, dialog popup memiliki ruang kosong di posisi dialog.
Apakah ada cara untuk menyembunyikan bagian Dialog ini?
Saya mencobanya dengan AlertDialog tetapi sepertinya tata letak tidak diatur dengan benar:
LayoutInflater inflater =
(LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.map_dialog, null);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(view);
// dialog = new Dialog(this);
// dialog.setContentView(R.layout.map_dialog);
dialog = builder.create();
((TextView) dialog.findViewById(R.id.nr)).setText(number);
Jika saya menggunakan kode ini saya mendapatkan Pengecualian Pointer nol di baris terakhir. Dialognya tidak nol sehingga TextView yang saya coba ambil tidak ada.
Jika saya batalkan komentar pada bagian di mana saya menggunakan Dialog Constructor semuanya berfungsi dengan baik tetapi untuk judul di atas tata letak dialog saya.
android
android-layout
dialog
Janusz
sumber
sumber
Jawaban:
Anda dapat menyembunyikan judul dialog menggunakan:
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
Versi sebelumnya dari jawaban ini, yang terlalu rumit:
Anda harus menggunakan
AlertDialog
. Ada penjelasan yang bagus di situs Pengembang Android tentang dialog khusus .Dalam ringkasan yang sangat singkat, Anda melakukan ini dengan kode seperti disalin di bawah ini dari situs web resmi. Itu membutuhkan file layot khusus, mengembang, memberinya beberapa teks dan ikon dasar, lalu membuatnya. Anda akan menunjukkannya dengan
alertDialog.show()
.Menanggapi komentar:
Saya berasumsi bahwa TextView dengan id
nr
ada di tampilan yang Anda gembungkanView view = inflater....
. Jika demikian, maka Anda perlu mengubah sedikit saja: alih-alihdialog.findView...
membuatnyaview.findView...
. Kemudian setelah Anda selesai melakukannya, ingatlah untuk menggunakan dialog.show (), atau bahkan builder.show () tanpa repot-repot melakukan builder.create ().sumber
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
FEATURE_NO_TITLE berfungsi saat membuat dialog dari awal, seperti pada:
Tapi itu tidak berfungsi ketika membuat AlertDialog (atau menggunakan Builder), karena sudah menonaktifkan judul dan menggunakan yang kustom secara internal.
Saya telah melihat sumber-sumber SDK, dan saya pikir itu tidak dapat dikerjakan. Jadi untuk menghapus spasi atas, satu-satunya solusi adalah membuat dialog khusus dari awal IMO, dengan menggunakan kelas Dialog secara langsung.
Selain itu, orang dapat melakukannya dengan suatu gaya, misalnya dalam styles.xml:
Lalu:
sumber
Dialog
, tetapi membuatAlertDialog
itu jauh lebih mudah. Seperti yang dinyatakan dalam dokumen :The Dialog class is the base class for dialogs, but you should avoid instantiating Dialog directly. Instead, use one of the following subclasses: <AlertDialog and others described here>
. TheAlertDialog
juga menangani hal-hal siklus hidup dan ok / membatalkan dalam sopan santun mudah.Dalam kode Anda, tambahkan baris ini
Atau dalam XML gunakan tema
XML akan menjadi implementasi yang lebih baik karena dengan versi kode bilah judul dibuat dan kemudian dihapus yang merupakan pemborosan sumber daya
Ubah jenis dialog lansiran ke dialog sistem (mis., TYPE_SYSTEM_OVERLAY) dan lihat apakah ini menyelesaikan masalah Anda
sumber
Gunakan seperti ini:
Ini akan menghapus bilah judul apa pun dari jendela dialog.
sumber
Gunakan kode di bawah ini sebelum
setcontentview
: -Catatan : Anda harus memiliki kode di atas, dalam urutan dan baris yang sama.
requestWindowFeature
harus sebelum baris setContentView.sumber
Anda dapat menghapus judul dengan
di mana dialog adalah nama dialog saya.
sumber
Dalam kode Anda jika Anda menggunakan
requestWindowFeature(Window.FEATURE_NO_TITLE);
pastikan bahwa itu berjalan sebelumdialog.setContentView();
kalau tidak menyebabkan aplikasi crash.sumber
Saya menemukan Tiga Cara untuk melakukan ini>
1) Menggunakan requestWindowFeature
2) Menggunakan style (style.xml)
3) Menggunakan tema XML di AndroidManifest.xml
sumber
Di kelas Custom_Dialog.java Anda tambahkan
requestWindowFeature(Window.FEATURE_NO_TITLE)
sumber
Jawaban olivierg bekerja untuk saya dan merupakan solusi terbaik jika membuat kelas Dialog khusus adalah rute yang ingin Anda tuju. Namun, itu mengganggu saya bahwa saya tidak bisa menggunakan kelas AlertDialog. Saya ingin dapat menggunakan sistem gaya AlertDialog standar. Membuat kelas dialog khusus tidak akan memiliki gaya ini.
Jadi saya menemukan solusi (retas) yang akan berfungsi tanpa harus membuat kelas khusus, Anda dapat menggunakan pembangun yang ada.
AlertDialog menempatkan Tampilan di atas tampilan konten Anda sebagai pengganti untuk judul tersebut. Jika Anda menemukan tampilan dan mengatur ketinggian ke 0, ruang hilang.
Saya telah menguji ini pada 2.3 dan 3.0 sejauh ini, mungkin masih belum berfungsi pada setiap versi.
Berikut adalah dua metode pembantu untuk melakukannya:
Berikut adalah contoh penggunaannya:
Jika Anda menggunakan ini dengan DialogFragment, ganti
onCreateDialog
metode DialogFragment . Kemudian buat dan kembalikan dialog Anda seperti contoh pertama di atas. Satu-satunya perubahan adalah Anda harus memberikan false sebagai parameter ke-3 (show) sehingga tidak memanggil show () pada dialog. DialogFragment akan menanganinya nanti.Contoh:
Saat saya menguji ini lebih lanjut, saya pasti akan memperbarui dengan tweak tambahan yang diperlukan.
sumber
Saya tidak tahu apakah pertanyaan ini masih aktual, tetapi dalam kasus saya, ketika saya beralih dari Dialog ke DialogFragment,
bukan pilihan, tapi saya bisa menggunakan
alih-alih dengan hasil yang sama.
sumber
setStyle(STYLE_NO_TITLE, 0);
) akan masuk pada metode onCreate dari kelas DialogFragment Anda.Setel judul menjadi string kosong menggunakan pembangun.
sumber
atur atribut "gravity" pada seluruh dialog menjadi "center". Maka Anda perlu menimpa pengaturan itu untuk semua komponen anak dalam dialog yang Anda tidak ingin terpusat.
sumber
sumber
dalam XML menggunakan tema
sumber
Jika kita cukup menggunakan dialog tanpa
setTitle()
, lalu apakah itu akan berhasil menghilangkan ruang judul?sumber
Pikirkan Anda bisa menggunakan ini sekarang:
sumber
membuat dialog tanpa judul
sumber
sumber
Saat menggunakan AlertDialog, tidak menggunakan
setTitle()
membuat judulnya hilangsumber
Setelah melakukan peretasan, saya berhasil:
sumber
dialog
di sini dangetResources()
Anda dapat melakukan ini tanpa menggunakan
AlertDialog
dengan mendefinisikan Kelas baru yang memanjang dariDialog
Kelas seperti ini:sumber
Berikut ini sesuatu yang dapat Anda lakukan
AlertBuilder
untuk menghilangkan judul:sumber
Gunakan ini
sumber
dialog_custom .requestWindowFeature (Window.FEATURE_NO_TITLE);
ini akan menghapus judul dari dialog cutsom.
Catatan tambahkan baris ini sebelum menambahkan konten .. misalnya
sumber