Nach dem Update einiger unserer Geräte auf Android 8.0 stürzt die App ab , wenn Sie sich auf ein TextInputEditText
Feld innerhalb von a konzentrieren :TextInputLayout
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)
Wenn wir zu Android- Einstellungen -> System -> Sprachen & Eingabe -> Erweitert -> Auto-Fill-Dienst -> Keine gehen , konzentrieren wir uns auf die TextInputEditText
/
TextInputLayout
nicht mehr abstürzenden.
Wie können wir den Absturz verhindern, ohne den neuen 8.0 Auto-Fill-Dienst auf den Geräten deaktivieren zu müssen?
android
android-edittext
android-8.0-oreo
android-textinputlayout
jesobremonte
quelle
quelle
Antworten:
Ich bin auch darauf gestoßen. Es stellt sich heraus, dass das Problem durch das Festlegen des Hinweistextes auf dem
EditText
verschachtelten Text im Internet verursacht wurdeTextInputLayout
.Ich habe ein bisschen gegraben und dieses Nugget in den Beta-Versionshinweisen zu 26.0.0 Beta 2 gefunden. Versionshinweise zum Android-Support Juni 2017
Das hat mich dazu gebracht, den Hinweis auf das
TextInputLayout
anstelle des verschachtelten zu setzenEditText
.Dies löste das Absturzproblem für mich. Beispiel:
Ich habe dies als Antwort hier gepostet , als ich Lesezeichen verwechselt habe. Entschuldigen Sie, dass Sie dieselbe Antwort zweimal gepostet haben.
quelle
Fügen Sie das unten genannte Attribut in Ihr
EditText
:android:importantForAutofill="noExcludeDescendants"
quelle
Luke Simpson macht es fast richtig, sollte nur "styles.xml" anstelle von "theme.xml" verwenden.
Ich habe eine neue Stildatei mit dem Versionsqualifizierer erstellt, die auf Version 26 abzielt, um sie klarer zu machen.
Kopieren Sie
AppTheme
einfach Ihre für die v26 / styles.xml und fügen SieeditTextStyle
Elemente imEditTextStyle
Stil hinzu.Auf diese Weise nehmen Sie diese Änderungen für alle Ihre EditTexts vor, ohne Ihre Layoutdateien ändern zu müssen.
quelle
Sie können einen beliebigen Wert für " ImportantFutAutofill" mit einem Stil festlegen oder im XML-Format ist es für NPE behoben, wenn Sie den EditText fokussieren. Es ist jedoch nicht behoben, wenn Sie lange auf "EditText" drücken und auf "AutoFill" klicken. Ich habe hier einen Fehlerbericht über diesen Fehler gefunden . Bitte fügen Sie einen Stern hinzu und teilen Sie Ihre Beobachtungen auch im Fehlerbericht mit.
Vielen Dank.
quelle
Ich habe die Datei v26 / theme.xml verwendet, um das automatische Ausfüllen im EditText-Stil nur für Oreo 8.0.0 zu überschreiben:
Beachten Sie, dass ich den Stil inline für jeden EditText in meiner Layout-XML anwenden musste, damit er wirksam wird. Ich habe versucht, diese Änderung global in meinem App-Thema anzuwenden, aber sie hat aus irgendeinem Grund nicht funktioniert.
quelle
@ Luke Simpson ist richtig. Sie können es in theme.XML verwenden wie: -
in V26 / app_styles.xml
Aber ich musste ein leeres Tag auch in app_styles.xml im Standardordner ablegen. Andernfalls wurden alle Eigenschaften von Text bearbeiten außer Kraft gesetzt und mein Bearbeitungstext funktionierte nicht richtig. Wenn Sie die Eigenschaft "importantForAutoFill" für Version 26 einfügen und möchten, dass die automatische Ausfüllung in 8.1 funktioniert, können Sie sie einfach einfügen
Die Eigenschaft zum automatischen Ausfüllen funktioniert also in 8.1. Es wird nur für 8.0 deaktiviert, da der Absturz in 8.0 stattfindet und bereits in 8.1 behoben wurde.
quelle
Wenn jemand immer noch " Hinweis " in " TextInputEditText " möchte, machen Sie app: pointeEnabled = "false" in TextInputLayout
quelle
Ich habe auch dieses Problem konfrontiert und schließlich haben wir den Grund für den Absturz auf Android 8.0 und Android 8.1.
erster grund (wichtiger hinweis): leerer hinweis (android: hinweis = "") in xml führt zum absturz im oreo gerät. bitte entfernen sie diesen leeren hinweis in editText in der gesamten projektsuche.
Zweiter Grund (wie oben erläutert): Stellen Sie sicher, dass Ihr editText-Hinweis in TextInputLayout angezeigt wird, wenn Sie TextInputLayout verwendet haben. Andernfalls können Sie einen Hinweis in editText verwenden.
Hoffe das hilft dir !!
Danke dir
quelle