Después de actualizar algunos de nuestros dispositivos a Android 8.0, al enfocarse en un TextInputEditText
campo dentro de a TextInputLayout
, la aplicación falla con esto 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)
Cuando vamos a Configuración de Android -> Sistema -> Idiomas y entrada -> Avanzado -> Servicio de autocompletar -> Ninguno , luego nos enfocamos en los TextInputEditText
/
TextInputLayout
bloqueos ya no.
¿Cómo podemos evitar que ocurra el bloqueo sin tener que deshabilitar el nuevo servicio 8.0 Autocompletar en los dispositivos?
android
android-edittext
android-8.0-oreo
android-textinputlayout
jesobremonte
fuente
fuente
Respuestas:
También me encontré con esto. Resulta que el problema se debió al establecimiento del texto de sugerencia en el
EditText
anidado dentro delTextInputLayout
.Investigué un poco y encontré esta pepita en las notas de la versión 26.0.0 Beta 2. Notas de la versión de soporte de Android de junio de 2017
Eso me llevó a intentar establecer la pista en el en
TextInputLayout
lugar de en el anidadoEditText
.Esto resolvió el problema de bloqueo para mí. Ejemplo:
Publiqué esto como una respuesta aquí mientras confundía los marcadores. Perdón por publicar la misma respuesta dos veces.
fuente
Agregue el atributo mencionado a continuación en su
EditText
:android:importantForAutofill="noExcludeDescendants"
fuente
Luke Simpson casi lo hace bien, solo debería usar "styles.xml" en lugar de "themes.xml".
Creé un nuevo archivo de estilo con calificador de versión, con el objetivo de v26, para hacerlo más claro.
Simplemente copie y pegue su
AppTheme
para v26 / styles.xml y agregueeditTextStyle
elementos alEditTextStyle
estilo.De esta manera, realiza estos cambios para todos sus EditTexts sin necesidad de cambiar sus archivos de diseño.
fuente
Puede establecer cualquier valor para importantForAutofill con un estilo o en el XML se corrige para NPE cuando enfoca EditText, pero no se corrige si mantiene presionado EditText y hace clic en Autocompletar. Encontré un informe de error sobre este error aquí , agregue una estrella y comparta sus observaciones en el informe de error también.
Gracias.
fuente
Usé v26 / themes.xml para anular el autocompletado de estilo EditText solo para Oreo 8.0.0:
Tenga en cuenta que tuve que aplicar el estilo en línea para cada EditText en mi diseño xml para que surta efecto. Traté de aplicar este cambio globalmente en el tema de mi aplicación, pero no funcionó por alguna razón.
fuente
@Luke Simpson tiene razón. Puedes usarlo en themes.XML como: -
en V26 / app_styles.xml
Pero tuve que poner una etiqueta vacía también en app_styles.xml en la carpeta predeterminada. De lo contrario, todas las propiedades de Editar texto se anulaban por esto y mi texto de edición no funcionaba correctamente. Y cuando pones la propiedad importantForAutoFill para v26 y quieres que el autocompletado funcione en 8.1, simplemente puedes poner
Entonces, la propiedad de autocompletar funciona en 8.1. Se desactivará solo para 8.0, ya que el bloqueo se está produciendo en 8.0 y ya se ha solucionado en 8.1.
fuente
Si alguien todavía quiere " pista " en " TextInputEditText ", haga la aplicación: hintEnabled = "false" en TextInputLayout
fuente
También me he enfrentado a este problema y finalmente obtuvimos la razón del bloqueo en Android 8.0 y Android 8.1.
primera razón (pista importante): pista vacía (android: hint = "") en xml conduce a fallar en el dispositivo oreo. Elimine esta pista vacía en editText en la búsqueda de todo el proyecto.
segunda razón (igual que la explicación anterior): asegúrese de que su sugerencia editText se muestre dentro de TextInputLayout si ha usado TextInputLayout, de lo contrario, puede usar la sugerencia dentro de editText.
¡Espero que esto te ayude!
Gracias
fuente