Menurut pengembang platform Android Dianne Hackborn dalam posting grup diskusi ini , Dialog menetapkan lebar dan tinggi tata letak tingkat atas Window mereka WRAP_CONTENT
. Untuk membuat Dialog lebih besar, Anda dapat mengatur parameter tersebut MATCH_PARENT
.
Kode demo:
AlertDialog.Builder adb = new AlertDialog.Builder(this);
Dialog d = adb.setView(new View(this)).create();
// (That new View is just there to have something inside the dialog that can grow big enough to cover the whole screen.)
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(d.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
d.show();
d.getWindow().setAttributes(lp);
Perhatikan bahwa atribut ditetapkan setelah Dialog ditampilkan. Sistem ini rewel tentang kapan mereka diatur. (Saya kira mesin tata letak harus mengaturnya saat dialog pertama kali ditampilkan, atau sesuatu.)
Akan lebih baik untuk melakukan ini dengan memperluas Theme.Dialog, maka Anda tidak perlu memainkan permainan menebak tentang kapan harus memanggil setAttributes. (Meskipun sedikit lebih sulit untuk membuat dialog secara otomatis mengadopsi tema terang atau gelap yang sesuai, atau tema Honeycomb Holo. Itu dapat dilakukan sesuai dengan http://developer.android.com/guide/topics/ui/themes. html # SelectATheme )
Coba bungkus tata letak dialog khusus Anda
RelativeLayout
sebagai gantiLinearLayout
. Itu berhasil bagi saya.sumber
Menentukan FILL_PARENT di jendela dialog, seperti yang disarankan orang lain, tidak berfungsi untuk saya (di Android 4.0.4), karena hanya merentangkan latar belakang dialog hitam untuk mengisi seluruh layar.
Yang berfungsi dengan baik adalah menggunakan nilai tampilan minimum, tetapi menspesifikasikannya dalam kode, sehingga dialog mengambil 90% layar.
Begitu:
Secara umum hanya menyesuaikan lebar harus cukup dalam banyak kasus.
sumber
Atur
android:minWidth
danandroid:minHeight
dalam tampilan kustom Anda xml. Ini dapat memaksa peringatan untuk tidak hanya membungkus ukuran konten. Menggunakan tampilan seperti ini harus melakukannya:sumber
Lebih sederhana lagi lakukan ini:
sumber
onCreate
setelah rotasi perangkat. Dalam hal ini, kami tidak dapat mengandalkan lebar / tinggi dari apa pun di tata letak, karena belum dibuat; tetapi lebar fisik / tinggi perangkat masih tersedia.ViewGroup.LayoutParams.WRAP_CONTENT
sebagai salah satu parametersumber
FILL_PARENT
dengan lebar yang dihitung sebagai 90% dari lebar tampilan saat ini. Tapi saya suka jawabannya karena lebih mudah daripada yang lain.Semua jawaban lain di sini masuk akal, tetapi tidak memenuhi apa yang dibutuhkan Fabian. Ini solusi saya. Ini mungkin bukan solusi yang sempurna tetapi itu bekerja untuk saya. Ini menunjukkan dialog yang pada layar penuh tetapi Anda dapat menentukan padding di atas, bawah, kiri atau kanan.
Seperti yang Anda lihat saya punya android: paddingTop = 20dp pada dasarnya yang Anda butuhkan. The android: windowBackground = @ warna / Black0Percent hanya kode warna dideklarasikan pada color.xml saya
Kode Warna itu hanya berfungsi sebagai boneka untuk menggantikan latar belakang jendela default Dialog dengan warna transparansi 0%.
Terakhir, inilah dialog kami yang menetapkan tampilan khusus yang menggunakan dialog.xml kami:
Kesimpulan: Saya mencoba mengganti tema dialog di styles.xml bernama CustomDialog. Itu mengesampingkan tata letak jendela Dialog dan memberi saya kesempatan untuk mengatur padding dan mengubah opacity dari latar belakang. Ini mungkin bukan solusi yang sempurna tapi saya harap ini membantu Anda .. :)
sumber
DialogFragment
) muncul ketika Anda melakukannya:Dialog customDialog = new Dialog(context, STYLE);
terima kasih, BENAR-BENAR, terima kasih.Anda dapat menggunakan persentase untuk lebar dialog windows (HANYA).
Lihat contoh ini dari Holo Theme:
Yang perlu Anda lakukan adalah memperluas tema ini dan mengubah nilai untuk "Mayor" dan "Kecil" menjadi 90%, bukannya 65%.
Salam.
sumber
Berikut ini berfungsi dengan baik untuk saya:
(catatan: windowMinWidthMajor / Minor seperti yang disarankan dalam jawaban sebelumnya tidak berhasil. Dialog saya terus berubah ukuran tergantung pada konten)
lalu:
sumber
Solusi dengan perhitungan 90% aktual:
di mana
getScreenWidth(Activity activity)
didefinisikan sebagai berikut (terbaik diletakkan di kelas Utils):sumber
Dapatkan lebar perangkat:
kemudian gunakan itu untuk membuat dialog 90% perangkat,
sumber
Nah, Anda harus mengatur tinggi dan lebar dialog Anda sebelum menunjukkan ini (dialog.show ())
jadi, lakukan sesuatu seperti ini:
sumber
Sejauh ini, cara paling sederhana yang bisa saya pikirkan -
Jika dialog Anda dibuat dari LinearLayout vertikal, cukup tambahkan tampilan boneka "tinggi mengisi", yang akan menempati seluruh ketinggian layar.
Sebagai contoh -
Perhatikan
android:weightSum="1"
atribut dalam LinearLayout dan atributandroid:layout_weight="1"
dalam tampilan dummysumber
Nah, Anda harus mengatur tinggi dan lebar dialog Anda sebelum menunjukkan ini (dialog.show ())
jadi, lakukan sesuatu seperti ini:
Mendapatkan kode ini, saya membuatnya beberapa perubahan:
Namun, ukuran dialog dapat berubah ketika perangkat mengubah posisinya. Mungkin Anda perlu menangani sendiri saat metrik berubah. PD: peekDecorView, menyiratkan bahwa tata letak dalam aktivitas diinisialisasi dengan benar jika tidak, Anda dapat menggunakan
untuk mendapatkan ukuran layar
sumber
Setelah menginisialisasi objek dialog Anda dan atur tampilan konten. Lakukan ini dan nikmati.
(dalam hal ini saya menetapkan 90% untuk lebar dan 70% untuk tinggi karena lebar 90% akan lebih dari toolbar)
sumber
Jawaban saya didasarkan pada koma tetapi tidak perlu menimpa onStart tetapi hanya onCreateView yang hampir selalu ditimpa secara default ketika Anda membuat fragmen baru.
Saya sudah mengujinya di Android 5.0.1.
sumber
Inilah varian saya untuk lebar dialog khusus:
Jadi tergantung pada orientasi perangkat (
ThemeHelper.isPortrait(mContext)
) lebar dialog akan menjadi 95% (untuk mode potret) atau 65% (untuk lanskap). Ini sedikit lebih banyak dari yang penulis tanyakan tetapi bisa bermanfaat bagi seseorang.Anda perlu membuat kelas yang meluas dari Dialog dan memasukkan kode ini ke Anda
onCreate(Bundle savedInstanceState)
metode .Untuk tinggi dialog, kode harus sama dengan ini.
sumber
ThemeHelper
? Saya tidak memiliki kelas ini tersedia di proyek saya.ThemeHelper
hanyalah kelas pembantu untuk kebutuhan saya. MetodenyaisPortrait(Context)
mengembalikan apakah orientasi layar perangkat adalah potret atau lanskap.sumber
Di atas banyak jawaban yang baik tetapi tidak ada yang bekerja untuk saya sepenuhnya. Jadi saya menggabungkan jawaban dari @nmr dan mendapatkan yang ini.
sumber
sumber
Anda perlu menggunakan style @ style.xml seperti CustomDialog untuk menampilkan dialog yang dapat disesuaikan.
dan gunakan gaya ini di Activity.java seperti ini
dan custom_dialog.xml Anda harus ada di dalam direktori layout Anda
sumber
Jika Anda menggunakan Constraint Layout , Anda dapat mengatur tampilan di dalamnya, untuk mengisi persentase layar dengan:
layout_constraintWidth_percent = "0.8"
Jadi, misalnya, jika Anda memiliki ScrollView di dalam dialog dan Anda ingin mengaturnya ke persentase tinggi layar. Akan seperti ini:
Semoga ini bisa membantu seseorang !!
sumber
Berikan saja AlertDialog tema ini
sumber
Berikut adalah jawaban singkat yang berfungsi untuk saya (Diuji pada API 8 dan API 19).
sumber
sumber
sumber