studio servicios oreo notificaciones funciones android android-edittext android-8.0-oreo android-textinputlayout

servicios - service android oreo



Android 8.0 Oreo falla al enfocar TextInputEditText (6)

Después de actualizar algunos de nuestros dispositivos a Android 8.0, al enfocarse en un campo TextInputEditText dentro de un TextInputLayout , la aplicación se bloquea con esta 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 centramos en TextInputEditText / TextInputLayout ya no se bloquea.

¿Cómo podemos evitar que ocurra el bloqueo sin tener que deshabilitar el nuevo servicio 8.0 Auto-fill en los dispositivos?


@Luke Simpson tiene razón. Puedes usarlo en themes.XML como: -

<item name="editTextStyle">@style/AppEditTextStyle</item> and then put <style name="AppEditTextStyle" parent="Widget.AppCompat.EditText"> <item name="android:importantForAutofill">auto</item> </style>

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 anulan por esto y mi texto de edición no funcionaba correctamente. Y cuando coloca la propiedad importantForAutoFill para v26 y desea que el autocompletado funcione en 8.1, simplemente puede poner

<style name="AppEditTextStyle" parent="Widget.AppCompat.EditText"> <item name="android:importantForAutofill">auto</item> </style>

Entonces, la propiedad de autocompletar funciona en 8.1. Se deshabilitará solo para 8.0 ya que el bloqueo se está produciendo en 8.0 y ya se ha solucionado en 8.1.


Agregue el atributo mencionado a continuación en su EditText :

android:importantForAutofill="noExcludeDescendants"


Luke Simpson casi lo hace bien, solo debe 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 agregue elementos EditTextStyle estilo EditTextStyle .

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> ... <item name="android:editTextStyle">@style/App_EditTextStyle</item> <item name="editTextStyle">@style/App_EditTextStyle</item> </style> <style name="App_EditTextStyle" parent="@android:style/Widget.EditText"> <item name="android:importantForAutofill">noExcludeDescendants</item> </style>

De esta manera, realiza estos cambios para todos sus EditTexts sin necesidad de cambiar sus archivos de diseño.


Me encontré con esto también. Resulta que el problema fue causado al configurar el texto de la sugerencia en EditText anidado dentro de TextInputLayout .

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

TextInputLayout debe establecer sugerencias sobre onProvideAutofillStructure ()

Eso me llevó a intentar configurar la sugerencia en TextInputLayout lugar del EditText anidado.

Esto resolvió el problema de bloqueo para mí. Ejemplo:

<android.support.design.widget.TextInputLayout android:id="@+id/textInputLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Some Hint Text" android.support.design:hintAnimationEnabled="true" android.support.design:hintEnabled="true" android.support.design:layout_marginTop="16dp"> <android.support.design.widget.TextInputEditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content"/> </android.support.design.widget.TextInputLayout>

Publiqué esto como respuesta here mientras mezclaba los marcadores. Perdón por publicar la misma respuesta dos veces.


Puede establecer cualquier valor para importantForAutofill con un estilo o en el XML, es fijo para NPE cuando enfoca EditText, pero no es fijo si mantiene presionado EditText y hace clic en Autocompletar. Encontré un informe de error sobre este error here , agregue una estrella y comparta sus observaciones en el informe de error también.

Gracias.


Utilicé v26 / themes.xml para anular el autocompletado de estilo EditText solo para Oreo 8.0.0:

<style name="EditTextStyle" parent="Widget.AppCompat.EditText"> <item name="android:importantForAutofill">noExcludeDescendants</item> </style>

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.

// HAD TO DO THIS IN LAYOUT XML FOR EACH EDIT TEXT <EditText style="@style/EditTextStyle" ... /> // THIS DIDN''T TAKE EFFECT IN THEMES XML (HAS BEEN ADDED TO MANIFEST) <style name="APP_THEME" parent="@style/Theme.AppCompat.Light"> <item name="android:editTextStyle">@style/EditTextStyle</item> <item name="editTextStyle">@style/EditTextStyle</item> </style>