Saya mencoba menampilkan DialogFragment hampir layar penuh. Tetapi saya entah bagaimana tidak dapat melakukannya.
Cara saya menunjukkan Fragmen langsung dari dokumentasi pengembang android
FragmentManager f = ((Activity)getContext()).getFragmentManager();
FragmentTransaction ft = f.beginTransaction();
Fragment prev = f.findFragmentByTag("dialog");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
// Create and show the dialog.
DialogFragment newFragment = new DetailsDialogFragment();
newFragment.show(ft, "dialog");
Saya tahu secara naif mencoba mengatur RelativeLayout dalam fragmen menjadi fill_parent dan beberapa minWidth dan minHeight.
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="1000px"
android:minHeight="600px"
android:background="#ff0000">
Saya akan tahu mengharapkan DialogFragment untuk mengisi sebagian besar layar. Tapi sepertinya saya hanya mengubah ukuran secara vertikal tetapi hanya sampai beberapa lebar tetap secara horizontal.
Saya juga mencoba mengatur atribut Window dalam kode, seperti yang disarankan di sini: http://groups.google.com/group/android-developers/browse_thread/thread/f0bb813f643604ec . Tapi ini juga tidak membantu.
Saya mungkin salah paham tentang bagaimana Android menangani Dialog, karena saya baru mengenalnya. Bagaimana saya bisa melakukan sesuatu seperti ini? Apakah ada cara alternatif untuk mencapai tujuan saya?
Perangkat Android:
Asus EeePad Transformer
Android 3.0.1
Pembaruan: Saya sekarang berhasil memasukkannya ke layar penuh, dengan kode berikut dalam fragmen
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NO_FRAME, android.R.style.Theme_Holo_Light);
}
Sayangnya, ini bukan keinginan yang saya inginkan. Saya pasti membutuhkan "padding" kecil di sekitar dialog untuk menunjukkan latar belakang.
Ada ide bagaimana mencapainya?
Jawaban:
Cobalah beralih ke
LinearLayout
bukanRelativeLayout
. Saya menargetkan api 3.0 Honeycomb saat pengujian.dan tata letak : fragment_dialog.xml
main.xml
sumber
Untuk mendapatkan DialogFragment di layar penuh
Timpa
onStart
DialogFragment Anda seperti ini:Dan terima kasih banyak untuk posting ini: The-mystery-of-androids-full-screen-dialog-fragmen
sumber
ViewGroup.LayoutParams.WRAP_CONTENT
untuk ketinggian. Terima kasih.sumber
Menurut tautan ini DialogFragment menunjukkan layar penuh padding di sisi ini akan bekerja seperti pesona.
sumber
Buat DialogFragment layar penuh dengan hanya menggunakan gaya
Solusi pertama
1. Tambahkan ke Anda
style.xml
:2. Tambahkan ke DialogFragment Anda:
Solusi alternatif
di mana
AppTheme
tema yang Anda tetapkan dalam gaya.sumber
Dalam kasus saya, saya menggunakan pendekatan berikut:
Plus LinearLayout untuk mengisi semua ruang dengan konten.
Tetapi masih ada celah kecil antara tepi kiri dan kanan dialog dan tepi layar pada beberapa perangkat Lollipop + (misalnya Nexus 9).
Itu tidak jelas tetapi akhirnya saya menemukan itu untuk membuatnya lebar penuh di semua perangkat dan platform latar belakang jendela harus ditentukan di dalam styles.xml seperti berikut:
Dan tentu saja gaya ini perlu digunakan ketika kita membuat dialog seperti berikut:
sumber
<item name="android:windowFullscreen">true</item> <item name="android:windowIsFloating">false</item>
Sumber: TechRepublicSaya bertemu masalah sebelumnya ketika menggunakan dialogFragment layar penuh: selalu ada padding saat mengatur layar penuh. coba kode ini dalam metode onActivityCreated () dari dialogFragment:
sumber
Sejauh API Android diperbarui, metode yang disarankan untuk menampilkan dialog layar penuh adalah sebagai berikut:
jika tidak, jika Anda tidak ingin ditampilkan dengan layar penuh, Anda dapat melakukan ini:
Semoga ini bisa membantu.
EDIT
Sadarilah bahwa solusi yang saya berikan berhasil tetapi memiliki kelemahan yang terkadang bisa menyusahkan. Menambahkan DialogFragment ke
android.R.id.content
wadah tidak akan memungkinkan Anda untuk menanganiDialogFragment#setCancelable()
fitur dengan benar dan dapat menyebabkan perilaku yang tidak terduga saat menambahkan DialogFragment itu sendiri ke tumpukan belakang juga.Jadi saya menyarankan Anda untuk mengubah gaya DialogFragment Anda dengan metode onCreate sebagai berikut:
Semoga ini bisa membantu.
sumber
Coba gunakan setStyle () di onCreate dan ganti onCreateDialog membuat dialog tanpa judul
atau hanya menimpa onCreate () dan setStyle sesama kode.
sumber
Memang bisa tergantung pada bagaimana tata letak didefinisikan. Tetapi untuk memastikan bahwa dialog mendapatkan ukuran yang diperlukan, solusi terbaik adalah menyediakan LayoutParams setelah dialog ditampilkan (dan bukan saat pembuatan). Pada DialogFragment dialog ditampilkan pada metode onStart , jadi metode yang valid untuk mendapatkan lebar penuh adalah:
Untuk juga menyediakan tema, atau gaya, seperti gaya NO_TITLE, lokasi terbaik ada di metode onCreate :
sumber
Catatan: Bahkan orang dapat menemukan jawaban yang tepat di sini. Tetapi saya ingin mengklarifikasi kebingungan.
Gunakan kode di bawah ini untuk
android.app.DialogFragment
Gunakan kode di bawah ini untuk
android.support.v4.app.DialogFragment
sumber
Dan versi kotlin!
sumber
Ini adalah solusi bagaimana saya menemukan masalah ini:
sumber
Buat tema di bawah ini di style.xml Anda:
lalu atur style di DialogFragment
sumber
Chirag Nagariya benar kecuali penambahan '_Fullscreen'. itu bisa diselesaikan menggunakan gaya dasar apa pun yang tidak berasal dari gaya Dialog. 'android.R.style.Theme_Black_NoTitleBar' dapat digunakan juga.
sumber
Jika ada orang lain yang menemukan ini, saya memiliki pengalaman yang serupa dengan ini tetapi ternyata masalahnya adalah saya lupa mengembalikan tampilan yang meningkat dari onCreateView (alih-alih mengembalikan super.onCreateView default). Saya hanya mengembalikan tampilan inflasi yang benar dan itu menyelesaikan masalah.
sumber
Solusi ini menerapkan tema layar penuh pada dialog, yang mirip dengan setStyle Chirag di onCreate. Kerugiannya adalah saveInstanceState tidak digunakan.
sumber
Coba ini untuk dialog fragmen umum untuk banyak kegunaan. Semoga ini bisa membantu Anda lebih baik
sumber
Inilah yang perlu Anda atur menjadi fragmen:
Dalam kasus Anda:
Dan mengapa? Karena DialogFragment (ketika tidak diberi tahu secara eksplisit), akan menggunakan gaya dalamnya yang akan membungkus tata letak khusus Anda di dalamnya (tanpa layar penuh, dll.).
Dan tata letak? Tidak perlu cara hacky, ini berfungsi dengan baik:
Nikmati
sumber
Saya sangat terlambat untuk menjawab pertanyaan ini, saya masih ingin membagikan jawaban ini sehingga di masa depan siapa pun dapat menggunakan ini.
Saya telah menggunakan kode ini dalam proyek saya ini berfungsi dalam versi yang lebih rendah dan juga versi yang lebih tinggi.
Cukup gunakan tema ini di dalam onCreateDialog () seperti ini:
android.R.style.Theme_Black_NoTitleBar_Fullscreen - Ini adalah kode sumber untuk tema ini. Anda hanya dapat melihat tema ini cukup untuk membuat DialogFragment muncul di layar penuh.
Tolong beri tahu saya jika ada yang menghadapi masalah. Semoga ini bisa membantu. Terima kasih :)
sumber
Cara berikut akan bekerja bahkan jika Anda mengerjakan tata letak relatif. Ikuti langkah-langkah berikut:
Pergi ke styles.xml dan kemudian di bawah tema yang baru saja ditambahkan, tambahkan dua atribut ini:
Pengaturan tema saya untuk dialog adalah seperti di bawah ini:
Pastikan tema memiliki orang tua sebagai Theme.AppCompat.Dialog Cara lain akan membuat gaya baru di styles.xml dan mengubahnya sesuai kode di atas.
Buka kelas Dialog Fragmen Anda dan dalam metode onCreate () , atur gaya Dialog Anda sebagai:
@Override public void onCreate (@Nullable Bundle SavedInstanceState) {super.onCreate (SavedInstanceState); setStyle (DialogFragment.STYLE_NORMAL, R.style.DialogTheme); }
sumber
Tambahkan baris di bawah ini dalam gaya dialog layar penuh.
sumber
window.setLayout
tidak cukup untuk perangkat yang lebih lama.Inilah yang saya lakukan:
sumber
sumber
Sebuah solusi dengan menggunakan baru
ConstraintLayout
yang membungkusConstraintLayout
dalamLinearLayout
dengan minHeight dan MinWidth tetap. Tanpa pembungkus, ConstraintLayout tidak mendapatkan ukuran yang tepat untuk Dialog.sumber
Bekerja untuk saya di Kotlin,
sumber
solusi berikut ini bekerja untuk saya solusi lain memberi saya beberapa ruang di sisi yaitu layar tidak penuh
Anda perlu membuat perubahan dalam metode onStart dan onCreate
sumber