Setiap kali keyboard perangkat lunak muncul, ia mengubah ukuran gambar latar belakang. Lihat tangkapan layar di bawah ini:
Seperti yang Anda lihat, latar belakangnya agak terjepit. Adakah yang bisa menjelaskan mengapa ukuran latar belakang berubah?
Layout saya adalah sebagai berikut:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/page_bg"
android:isScrollContainer="false"
>
<LinearLayout android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_width="fill_parent"
>
<EditText android:id="@+id/CatName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="textCapSentences"
android:lines="1"
/>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/save"
android:onClick="saveCat"
/>
</LinearLayout>
<ImageButton
android:id="@+id/add_totalk"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="@null"
android:src="@drawable/add_small"
android:scaleType="center"
android:onClick="createToTalk"
android:layout_marginTop="5dp"
/>
</LinearLayout>
android
view
android-linearlayout
Andreas Wong
sumber
sumber
Saya menghadapi masalah yang sama ketika mengembangkan aplikasi obrolan, layar obrolan dengan gambar latar belakang.
android:windowSoftInputMode="adjustResize"
meremas gambar latar belakang saya agar sesuai dengan ruang yang tersedia setelah keyboard lunak ditampilkan dan "AdjustPan" menggeser seluruh tata letak untuk menyesuaikan keyboard lunak. Solusi untuk masalah ini adalah mengatur latar belakang jendela alih-alih latar belakang tata letak di dalam XML aktivitas. GunakangetWindow().setBackgroundDrawable()
dalam aktivitas Anda.sumber
Inilah solusi terbaik untuk menghindari masalah semacam itu.
Langkah 1: Buat gaya
Langkah 2: Tetapkan gaya aktivitas Anda di
AndroidManifest
filesumber
Melalui android: windowSoftInputMode = "AdjustPan" memberikan pengalaman pengguna yang buruk karena melalui seluruh layar berjalan di atas (bergeser ke atas) Jadi, berikut adalah salah satu jawaban terbaik.
Saya memiliki masalah yang sama tetapi setelah itu, saya menemukan jawaban yang luar biasa dari @Gem
Dalam Manifest
Dalam xml
Jangan Tetapkan latar belakang apa pun di sini dan simpan tampilan Anda di bawah ScrollView
Di jawa
Anda perlu mengatur latar belakang ke jendela:
Terima kasih untuk @Gem.
sumber
hanya untuk tambahan ...
jika Anda memiliki tampilan daftar pada aktivitas Anda, Anda perlu menambahkan ini
android:isScrollContainer="false"
di properti Anda ...dan jangan lupa menambahkan
android:windowSoftInputMode="adjustPan"
manifes xml Anda di aktivitas Anda ...jika kalian menggunakan
android:windowSoftInputMode="adjustUnspecified"
dengan tampilan yang dapat digulir pada tata letak Anda, maka latar belakang Anda masih akan diubah ukurannya oleh keyboard lunak ...akan lebih baik jika Anda menggunakan nilai "AdjustPan" untuk mencegah latar belakang Anda mengubah ukuran ...
sumber
Dalam kasus jika seseorang membutuhkan
adjustResize
perilaku dan tidak ingin diaImageView
diubah ukurannya di sini adalah solusi lain.Hanya menempatkan
ImageView
dalamScrollView
=>RelativeLayout
denganScrollView.fillViewport = true
.sumber
Saya menemui masalah utama saat mengerjakan aplikasi saya. Pada awalnya, saya menggunakan metode yang disediakan oleh @parulb untuk menyelesaikan masalah. Terima kasih banyak padanya. Tapi kemudian saya perhatikan bahwa gambar latar belakang sebagian disembunyikan oleh actionbar (dan statusbar saya yakin). Masalah kecil ini sudah diajukan oleh @ zgc7009 yang berkomentar di bawah jawaban @parulb satu setengah tahun yang lalu tetapi tidak ada yang menjawab.
Saya bekerja sepanjang hari untuk menemukan cara dan untungnya saya setidaknya bisa menyelesaikan masalah ini dengan sempurna di ponsel saya sekarang.
Pertama-tama kita membutuhkan sumber daya daftar lapisan dalam folder yang dapat digambar untuk menambahkan bantalan di atas ke gambar latar belakang:
Kedua kami menetapkan file ini sebagai sumber daya untuk latar belakang seperti yang disebutkan di atas:
Saya menggunakan Nexus 5. Saya menemukan cara untuk mendapatkan ketinggian actionbar dalam xml tetapi tidak pada statusbar, jadi saya harus menggunakan ketinggian tetap 75dp untuk bantalan atas. Semoga ada yang bisa menemukan bagian terakhir dari teka-teki ini.
sumber
Saya mengalami masalah serupa, tetapi sepertinya menggunakan
adjustPan
denganandroid:isScrollContainer="false"
masih tidak memperbaiki tata letak saya (yang merupakan RecyclerView di bawah LinearLayout). RecyclerView baik-baik saja, tetapi setiap kali keyboard virtual muncul, LinearLayout disesuaikan ulang.Untuk mencegah perilaku ini (saya hanya ingin agar keyboard melewati tata letak saya), saya pergi dengan kode berikut:
Ini memberitahu Android untuk meninggalkan tata letak Anda sendiri saat papan ketik virtual dipanggil.
Lebih banyak membaca tentang opsi yang mungkin dapat ditemukan di sini (meskipun anehnya, sepertinya tidak ada entri untuk
adjustNothing
).sumber
Setelah mempelajari dan menerapkan semua jawaban yang tersedia, di sini saya menambahkan solusi.
Jawaban ini adalah kombinasi kode dari:
https://stackoverflow.com/a/45620231/1164529
https://stackoverflow.com/a/27702210/1164529
Berikut adalah
AppCompatImageView
kelas khusus yang tidak menunjukkan keyboard lunak peregangan atau pengguliran: -Untuk menggunakannya sebagai latar belakang
Fragment
kelas saya , saya mengaturnya sebagai elemen pertamaFrameLayout
.sumber
Tambahkan baris ini dalam file AndroidManifest.xml :
lihat tautan ini untuk info lebih lanjut.
sumber
Cukup gunakan dalam
onCreate()
kode Anda ini:dan hilangkan baris ini di xml Anda:
Baca lebih lanjut di:
http://developer.android.com/reference/android/view/Window.html
terima kasih untuk: Adrian Cid Almaguer
sumber
Saya menghadapi masalah ini, ketika gambar latar belakang saya hanya
ImageView
di dalamFragment
, dan ukurannya diubah oleh keyboard.Solusi saya adalah: menggunakan kustom
ImageView
dari SO Answer ini , diedit agar kompatibel denganandroidx
.sumber
Cukup tambahkan aktivitas Anda
sumber
Saya menghadapi masalah yang sama sebelumnya, tetapi tidak ada solusi yang bekerja untuk saya begitu lama karena saya menggunakan
Fragment
, dan jugagetActivity().getWindow().setBackgroundDrawable()
bukan solusi untuk saya.Solusi yang berhasil bagi saya adalah menimpa
FrameLayout
dengan logika untuk menangani keyboard yang akan muncul dan mengubah bitmap saat bepergian.Berikut ini adalah kode FrameLayout saya (Kotlin):
Dan saya menggunakannya seperti latar belakang FrameLayout yang biasa.
frameLayout.backgroundImage = Drawable.createFromPath(path)
Semoga ini bisa membantu.
sumber
Anda bisa membungkus LinearLayout Anda dengan FrameLayout dan menambahkan ImageView dengan Latar Belakang:
Dan Anda dapat mengatur tinggi ketika Anda membuat aktivitas / fragmen (untuk mencegah penskalaan saat membuka keyboard). Beberapa kode di Kotlin dari Fragment:
sumber
jika Anda menetapkan gambar sebagai windowbackground dan ui akan macet. maka mungkin ada kemungkinan Anda menggunakan drawable yang ada di folder drawable tunggal, jika ya maka Anda harus menempelkannya di drawable-nodpi atau drawable-xxxhdpi.
sumber
Solusi saya adalah mengganti latar belakang jendela dengan salah satu tata letak, lalu atur tata letak latar menjadi nol. Dengan cara ini saya menyimpan gambar di jendela pratinjau XML:
Jadi simpan latar belakang dalam tata letak dan tambahkan id untuk itu. Kemudian dalam aktivitas onCreate () masukkan kode ini:
sumber