Saya ingin menyesuaikan / mengatur ulang ukuran tata letak saat keyboard lunak diaktifkan, seperti di bawah ini:
Sebelum dan sesudah:
Menemukan beberapa sumber daya di SO:
- Cara menjaga agar semua bidang dan teks tetap terlihat saat keyboard lunak ditampilkan
- tata letak keyboard lunak Android merusak ketika muncul
- Sesuaikan tata letak saat keyboard lunak diaktifkan
Tetapi pertanyaan & jawabannya agak ambigu, inilah pertanyaan dengan gambaran yang lebih jelas tentang apa yang saya inginkan.
Persyaratan:
- Ini harus berfungsi pada ponsel dengan ukuran layar apa pun.
- Memperhatikan bahwa ruang margin / padding di "FACEBOOK" dan "Sign up for Facebook" telah berubah sebelum dan sesudah.
- Tidak ada tampilan gulir yang terlibat.
Theme.AppCompat.Light.NoActionBar.FullScreen
), sesuai jawaban ini -> stackoverflow.com/a/7509285/1307690Jawaban:
Cukup tambahkan
di AndroidManifest.xml tempat Anda mendeklarasikan aktivitas khusus ini dan ini akan menyesuaikan opsi ukuran tata letak.
beberapa kode sumber di bawah ini untuk desain tata letak
sumber
Pertanyaan ini telah diajukan beberapa tahun yang lalu dan "Rahasia Andro Geni" memiliki penjelasan dasar yang baik dan "tir38" juga melakukan upaya yang baik untuk solusi lengkap, tetapi sayangnya tidak ada solusi lengkap yang diposting di sini. Saya telah menghabiskan beberapa jam untuk mencari tahu hal-hal dan inilah solusi lengkap saya dengan penjelasan terperinci di bagian bawah:
Dan di AndroidManifest.xml , jangan lupa atur:
pada
<activity>
tag yang Anda inginkan tata letak seperti itu.Pikiran:
Saya menyadari bahwa
RelativeLayout
tata letak yang membentang melalui semua ruang yang tersedia dan kemudian diubah ukurannya saat keyboard muncul.Dan
LinearLayout
tata letak yang tidak diubah ukurannya dalam proses mengubah ukuran.Itu sebabnya Anda perlu memiliki 1
RelativeLayout
segera setelahScrollView
span melalui semua ruang layar yang tersedia. Dan Anda perlu memiliki bagianLinearLayout
dalam yangRelativeLayout
lain bagian dalam Anda akan hancur ketika ukurannya terjadi. Contoh yang bagus adalah "headerLayout". Jika tidak ada bagianLinearLayout
dalamnyaRelativeLayout
teks "facebook" itu akan hancur dan tidak akan ditampilkan.Dalam gambar masuk "facebook" yang diposting dalam pertanyaan, saya juga memperhatikan bahwa seluruh bagian login (mainLayout) berpusat vertikal dalam kaitannya dengan seluruh layar, karenanya atribut:
pada
LinearLayout
tata letak. Dan karena mainLayout ada di dalamLinearLayout
ini berarti bagian itu tidak diubah ukurannya (lagi lihat gambar yang dipermasalahkan).sumber
android:layout_alignParentBottom="true"
. Ini membuatnya menempel ke bawah.android:layout_marginBottom="15dp"
kepada footerLayout dan kemudian RelativeLayout yang memegang textView2 dan helpButton . Dalam kedua kasus, helpButton dihancurkan (bahkan tanpa atribut marginBottom). Tidak mungkin editText1 atau editText2 pernah dihancurkan, karena mereka ada di dalam LinearLayout . Apakah Anda mungkin menetapkan margin pada Layout lain (tidak hanya footerLayout )? Coba dari awal jika Anda tidak berhasil! Anda juga bisa bermain denganandroid:windowSoftInputMode
atribut di AndroidManifest.Tambahkan baris ini di Manifest Anda di mana Aktivitas Anda dipanggil
atau
Anda dapat menambahkan baris ini di
onCreate
sumber
adjustPan
danadjustResize
. Ini adalah mode yang berbeda. Baca lebih lanjut tentang mereka di sini: stackoverflow.com/a/17410528/1738090 Dan di sini: developer.android.com/guide/topics/manifest/activity-elementPengembang Android memiliki jawaban yang tepat, tetapi kode sumber yang disediakan cukup bertele-tele dan tidak benar-benar menerapkan pola yang dijelaskan dalam diagram.
Ini templat yang lebih baik:
Terserah Anda untuk memutuskan tampilan apa yang Anda gunakan untuk bagian "scrolling" dan "footer". Juga tahu bahwa Anda mungkin harus mengatur
ScrollView
s fillViewPort .sumber
LinearLayout
s bukan Frame dan Relatif, tetapi semua tampilan masih di atas satu sama lain.Ini dapat bekerja untuk semua jenis tata letak.
sebagai contoh:
dan
sebagai contoh:
sumber
Ini memungkinkan untuk menampilkan tata letak yang diinginkan yang sebelumnya disembunyikan oleh keyboard.
Tambahkan ini ke tag aktivitas di AndroidManifest.xml
Kelilingi tampilan root Anda dengan ScrollView, lebih disukai dengan scrollbar = tidak ada. ScrollView dengan benar tidak akan mengubah apa pun dengan tata letak Anda kecuali digunakan untuk menyelesaikan masalah ini.
Dan kemudian atur fitsSystemWindows = "true" pada tampilan yang ingin Anda tampilkan sepenuhnya di atas keyboard. Ini akan membuat EditText Anda terlihat di atas keyboard, dan memungkinkan untuk menggulir ke bawah ke bagian-bagian di bawah EditText tetapi dalam tampilan dengan fitsSystemWindows = "true".
Sebagai contoh:
Jika Anda ingin menampilkan bagian penuh dari fitsSystemWindows = "true" tampilan di atas keyboard saat keyboard muncul, Anda akan memerlukan beberapa kode untuk menggulir tampilan ke bawah:
Contoh tata letak lengkap:
sumber
android:fitsSystemWindows="true"
adalah apa yang memberi saya hasil yang diinginkan yang saya inginkan ... terima kasihBagi mereka yang menggunakan ConstraintLayout ,
android:windowSoftInputMode="adjustPan|adjustResize"
tidak akan berfungsi.Apa yang dapat Anda lakukan adalah menggunakan pendengar keyboard lunak , mengatur batasan tampilan dari bawah ke bawah tampilan atas, kemudian menetapkan bias vertikal untuk setiap tampilan (sebagai persentase posisi antar kendala) ke pedoman horizontal (juga diposisikan berdasarkan persentase , tetapi untuk orang tua).
Untuk setiap tampilan, kita hanya perlu perubahan
app:layout_constraintBottom_toBottomOf
untuk@+id/guideline
saat keyboard ditampilkan , pemrograman tentu saja.Umumnya keyboard lunak membutuhkan tidak lebih dari 50% dari ketinggian layar. Dengan demikian, Anda dapat menetapkan pedoman pada 0,5.
Sekarang secara pemrograman, ketika keyboard tidak ditampilkan , kita dapat mengatur semua
app:layout_constraintBottom_toBottomOf
kembali ke induk, sebaliknya.Panggil metode ini:
Yang penting adalah memastikan untuk mengatur bias vertikal dengan cara yang akan skala dengan benar ketika keyboard ditampilkan dan tidak ditampilkan.
sumber
Banyak jawaban yang benar. Dalam
AndroidManifest
aku menulis:Dalam kasus saya, saya menambahkan tema
styles.xml
, tetapi Anda dapat menggunakan tema Anda sendiri:Saya mengetahui bahwa jika saya menggunakan tema layar penuh, pengubahan ukuran tidak terjadi:
Juga dalam kasus saya
adjustResize
berfungsi, tetapiadjustPan
tidak.Untuk tata letak layar penuh lihat solusinya di Android Cara menyesuaikan tata letak dalam Mode Layar Penuh ketika papan tombol terlihat atau di https://gist.github.com/grennis/2e3cd5f7a9238c59861015ce0a7c5584 .
Juga https://medium.com/@sandeeptengale/problem-solved-3-android-full-screen-view-translucent-scrollview-adjustresize-keyboard-b0547c7ced32 berfungsi, tetapi StatusBar transparan, jadi baterai, jam, Wi- Ikon Fi terlihat.
Jika Anda membuat aktivitas dengan File> Baru> Aktivitas> Aktivitas Layar Penuh, di mana dalam kode digunakan:
Anda juga tidak akan mencapai hasil. Anda dapat menggunakan
android:fitsSystemWindows="true"
wadah root, tetapi StatusBar muncul. Jadi gunakan solusi dari tautan pertama.sumber
Dalam kasus saya itu membantu.
main_layout.xml
Gunakan ini dalam
manifest
fileSekarang bagian terpenting! Gunakan tema seperti ini di tag
Activity
atauApplication
.Dan temanya mengambil seperti ini
Jadi saya kehilangan temanya. Yang membuat saya frustrasi sepanjang hari.
sumber
Anda cukup mengatur opsi ini di file AndroidManifest.xml.
Penggunaan
adjustPan
tidak direkomendasikan oleh Google karena pengguna mungkin perlu menutup keyboard untuk melihat semua kolom input.Info lebih lanjut: Manifes Aplikasi Android
sumber
Bagi saya ini bekerja dengan baris kode ini:
Masukkan saja ke metode onCreate. Terbaik!
sumber
Tambahkan baris ini ke File Manifiest:
sumber
Saya menggunakan bingkai kelas Extended ini dan ketika saya perlu menghitung ulang ukuran tinggi diLayout saya menimpa pengukuran dan mengurangi keyboardHeight menggunakan getKeyboardHeight ()
Saya membuat bingkai yang perlu diubah ukurannya dengan papan tombol softkey
SizeNotifierFrameLayout
sumber
Kode ini berfungsi untuk saya. Saat keyboard muncul, Anda dapat menggulir layar
Di AndroidManifest.xml
activity_sign_up.xml
rounded_border_edittext.xml
btn_blue_selector.xml
sumber
Di Xamarin daftarkan kode di bawah ini dalam aktivitas Anda
Saya menggunakan Layout Relatif jika Anda menggunakan Constraint Layout, kode di atas akan berfungsi sebagai kode di bawah ini
sumber