Android 8.0 Oreo crash on focusing TextInputEditText
Luke Simpson almost make it right, just should use "styles.xml" instead of "themes.xml".
I created a new style file with version qualifier, aiming to v26, to make it clearer.
Just copy and paste your AppTheme
for the v26/styles.xml and add editTextStyle
items the EditTextStyle
style.
<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>
In this way you make this changes for all your EditTexts without needing to change your layout files.
I used the v26/themes.xml to override the EditText style autofill only for Oreo 8.0.0:
<style name="EditTextStyle" parent="Widget.AppCompat.EditText">
<item name="android:importantForAutofill">noExcludeDescendants</item>
</style>
Note that I had to apply the style inline for each EditText in my layout xml for it to take effect. I tried to apply this change globally in my app theme but it didn't work for some reason.
// 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>
I ran into this too. It turns out the issue was caused by setting the hint text on the EditText
nested inside the TextInputLayout
.
I did some digging and found this nugget in the 26.0.0 Beta 2 release notes. Android Support Release Notes June 2017
TextInputLayout must set hints on onProvideAutofillStructure()
That led me to try setting the hint on the TextInputLayout
instead of the nested EditText
.
This resolved the crashing issue for me. Example:
<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>
I posted this as an answer here as I mixed up bookmarks. Sorry for posting the same answer twice.
Add below mentioned attribute in your EditText
:
android:importantForAutofill="noExcludeDescendants"