Après avoir mis à jour certains de nos appareils vers Android 8.0, en vous concentrant sur un TextInputEditText
champ à l'intérieur d'un TextInputLayout
, l'application se bloque avec ceci 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)
Lorsque nous allons dans Paramètres Android -> Système -> Langues et saisie -> Avancé -> Service de remplissage automatique -> Aucun , puis en se concentrant sur les TextInputEditText
/
TextInputLayout
plantages plus.
Comment pouvons-nous empêcher le crash de se produire sans avoir à désactiver le nouveau service de remplissage automatique 8.0 sur les appareils?
Réponses:
J'ai rencontré ça aussi. Il s'avère que le problème a été causé par la définition du texte d'indication sur le
EditText
fichier imbriqué dans leTextInputLayout
.J'ai fouillé et j'ai trouvé cette pépite dans les notes de publication de la version 26.0.0 Beta 2. Notes de version du support Android Juin 2017
Cela m'a amené à essayer de définir l'indication sur le
TextInputLayout
plutôt que sur l'imbricationEditText
.Cela a résolu le problème de plantage pour moi. Exemple:
J'ai posté ceci comme réponse ici en mélangeant des signets. Désolé d'avoir publié la même réponse deux fois.
la source
Ajoutez l'attribut mentionné ci-dessous dans votre
EditText
:android:importantForAutofill="noExcludeDescendants"
la source
Luke Simpson a presque réussi, il devrait simplement utiliser "styles.xml" au lieu de "themes.xml".
J'ai créé un nouveau fichier de style avec un qualificatif de version, visant à v26, pour le rendre plus clair.
Copiez et collez simplement votre
AppTheme
pour le v26 / styles.xml et ajoutez deseditTextStyle
éléments auEditTextStyle
style.De cette façon, vous effectuez ces modifications pour tous vos EditTexts sans avoir à modifier vos fichiers de mise en page.
la source
Vous pouvez définir n'importe quelle valeur pour importantForAutofill avec un style ou dans le XML, il est corrigé pour NPE lorsque vous vous concentrez sur EditText, mais ce n'est pas corrigé si vous appuyez longuement sur EditText et que vous cliquez sur AutoFill. J'ai trouvé un rapport de bogue à propos de ce bogue ici , veuillez ajouter une étoile et partager vos observations dans le rapport de bogue également.
THX.
la source
J'ai utilisé le v26 / themes.xml pour remplacer le remplissage automatique du style EditText uniquement pour Oreo 8.0.0:
Notez que j'ai dû appliquer le style en ligne pour chaque EditText dans ma mise en page xml pour qu'il prenne effet. J'ai essayé d'appliquer ce changement globalement dans le thème de mon application, mais cela n'a pas fonctionné pour une raison quelconque.
la source
@Luke Simpson a raison. Vous pouvez l'utiliser dans des thèmes.XML comme: -
dans V26 / app_styles.xml
Mais, j'ai dû mettre une balise vide également dans app_styles.xml dans le dossier par défaut. Sinon, toutes les propriétés de Modifier le texte étaient remplacées par cela et mon texte d'édition ne fonctionnait pas correctement. Et lorsque vous mettez la propriété importantForAutoFill pour la v26 et que vous voulez que le remplissage automatique fonctionne dans 8.1, vous pouvez simplement mettre
Ainsi, la propriété de remplissage automatique fonctionne dans la version 8.1. Il sera désactivé uniquement pour la version 8.0 car le crash se produit dans la version 8.0 et il a déjà été corrigé dans la version 8.1.
la source
Si quelqu'un veut toujours un " indice " dans " TextInputEditText ", créez l' application: hintEnabled = "false" dans TextInputLayout
la source
J'ai également rencontré ce problème et nous avons enfin la raison du crash sur Android 8.0 et Android 8.1.
première raison (indice important): un indice vide (android: hint = "") dans xml entraîne un crash dans le périphérique oreo. Veuillez supprimer cet indice vide dans editText dans la recherche de projet dans son ensemble.
deuxième raison (la même que celle expliquée ci-dessus): assurez-vous que votre indice editText doit être affiché dans TextInputLayout si vous avez utilisé TextInputLayout sinon vous pouvez utiliser l'indice dans editText.
J'espère que cela vous aidera !!
Je vous remercie
la source