Setelah memperbarui beberapa perangkat kami ke Android 8.0, setelah berfokus pada TextInputEditText
bidang di dalam a TextInputLayout
, aplikasi mogok dengan ini Exception
:
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'void
android.view.View.getBoundsOnScreen(android.graphics.Rect)' on a null object reference
at android.app.assist.AssistStructure$WindowNode.(AssistStructure.java)
at android.app.assist.AssistStructure.(AssistStructure.java)
at android.app.ActivityThread.handleRequestAssistContextExtras(ActivityThread.java:3035)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1807)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Ketika kita pergi ke Android Settings -> System -> Languages & input -> Advanced -> Auto-fill service -> None , lalu fokus pada TextInputEditText
/
TextInputLayout
tidak lagi crash.
Bagaimana kita dapat mencegah terjadinya crash tanpa harus menonaktifkan layanan baru 8.0 Isi-Otomatis pada perangkat?
android
android-edittext
android-8.0-oreo
android-textinputlayout
jesobremonte
sumber
sumber
Jawaban:
Aku juga mengalami ini. Ternyata masalah itu disebabkan oleh pengaturan teks petunjuk di
EditText
dalam fileTextInputLayout
.Saya melakukan penggalian dan menemukan nugget ini di catatan rilis 26.0.0 Beta 2. Catatan Rilis Dukungan Android Juni 2017
Itu membuat saya mencoba mengatur petunjuk di
TextInputLayout
alih - alih bersarangEditText
.Ini menyelesaikan masalah mogok untuk saya. Contoh:
Saya memposting ini sebagai jawaban di sini karena saya mencampuradukkan bookmark. Maaf telah memposting jawaban yang sama dua kali.
sumber
Tambahkan atribut yang disebutkan di bawah ini di
EditText
:android:importantForAutofill="noExcludeDescendants"
sumber
Luke Simpson hampir memperbaikinya, sebaiknya gunakan "styles.xml" bukan "themes.xml".
Saya membuat file gaya baru dengan pengualifikasi versi, dengan tujuan v26, untuk membuatnya lebih jelas.
Cukup salin dan tempel Anda
AppTheme
untuk v26 / styles.xml dan tambahkaneditTextStyle
itemEditTextStyle
gayanya.Dengan cara ini Anda membuat perubahan ini untuk semua EditText Anda tanpa perlu mengubah file layout Anda.
sumber
Anda dapat mengatur nilai apa pun untuk importantForAutofill dengan gaya atau dalam XML, ini memperbaiki NPE saat Anda memfokuskan EditText tetapi tidak diperbaiki jika Anda menekan lama EditText dan Anda mengklik IsiOtomatis. Saya menemukan Laporan Bug tentang bug ini di sini , harap tambahkan bintang dan bagikan juga pengamatan Anda di laporan bug.
Terima kasih.
sumber
Saya menggunakan v26 / themes.xml untuk mengganti autofill gaya EditText hanya untuk Oreo 8.0.0:
Perhatikan bahwa saya harus menerapkan gaya sebaris untuk setiap EditText di tata letak xml saya agar dapat diterapkan. Saya mencoba menerapkan perubahan ini secara global di tema aplikasi saya tetapi tidak berhasil karena beberapa alasan.
sumber
@ Luke Simpson benar. Anda dapat menggunakannya di themes.XML seperti: -
di V26 / app_styles.xml
Tapi, saya juga harus meletakkan tag kosong di app_styles.xml di folder default. Jika tidak, semua properti Edit teks ditimpa oleh ini dan teks edit saya tidak berfungsi dengan benar. Dan saat Anda meletakkan properti importantForAutoFill untuk v26 dan ingin IsiOtomatis berfungsi di 8.1, Anda cukup meletakkan
Jadi, properti IsiOtomatis berfungsi di 8.1. Ini akan dinonaktifkan hanya untuk 8.0 karena crash terjadi di 8.0 dan sudah diperbaiki di 8.1.
sumber
Jika ada yang masih menginginkan " petunjuk " di " TextInputEditText " buat aplikasi: hintEnabled = "false" di TextInputLayout
sumber
Saya juga menghadapi masalah ini dan akhirnya kami mendapat alasan crash di android 8.0 dan android 8.1.
alasan pertama (petunjuk penting): petunjuk kosong (android: hint = "") di xml menyebabkan crash di perangkat oreo. Harap hapus petunjuk kosong ini di editText di seluruh penelusuran proyek.
alasan kedua (sama seperti penjelasan di atas): pastikan petunjuk editText Anda harus ditampilkan di dalam TextInputLayout jika Anda telah menggunakan TextInputLayout jika tidak, Anda dapat menggunakan petunjuk di dalam editText.
Semoga ini membantu Anda !!
Terima kasih
sumber