TextInputEditText को फोकस करने पर Android 8.0 Oreo क्रैश




android-edittext android-8.0-oreo (4)

@ ल्यूक सिम्पसन सही है। आप इसे theme.XML में उपयोग कर सकते हैं जैसे: -

<item name="editTextStyle">@style/AppEditTextStyle</item>

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

V26 / app_styles.xml में

लेकिन, मुझे डिफ़ॉल्ट फ़ोल्डर में app_styles.xml में खाली टैग भी डालना था। अन्यथा, संपादित पाठ के सभी गुण इसके द्वारा ओवरराइड हो रहे थे और मेरा संपादित पाठ ठीक से काम नहीं कर रहा था। और जब आप v26 के लिए महत्वपूर्णफोरऑटोफिल संपत्ति डालते हैं और आप चाहते हैं कि ऑटोफिल 8.1 में काम करे, तो आप बस डाल सकते हैं

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

तो, 8.1 में ऑटोफिल संपत्ति काम करती है। यह सिर्फ 8.0 के लिए अक्षम हो जाएगा क्योंकि दुर्घटना 8.0 में हैपनिंग है और यह पहले से 8.1 में तय किया गया है।

हमारे कुछ उपकरणों को Android 8.0 पर अपडेट करने के बाद, TextInputEditText अंदर TextInputEditText फ़ील्ड पर ध्यान केंद्रित करने पर, ऐप इस 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)

जब हम Android सेटिंग -> सिस्टम -> भाषाओं और इनपुट -> एडवांस -> ऑटो-फिल सेवा -> कोई नहीं पर जाते हैं , तो TextInputEditText / TextInputLayout पर ध्यान केंद्रित करते हुए अब क्रैश नहीं होता है।

हम उपकरणों पर नई 8.0 ऑटो-फिल सेवा को अक्षम किए बिना दुर्घटना को कैसे रोक सकते हैं?


आप एक शैली के साथ importantForAutofill XML के लिए कोई भी मान सेट कर सकते हैं या XML में इसे NPE के लिए ठीक कर सकते हैं जब आप EditText पर ध्यान केंद्रित करते हैं, लेकिन यह ठीक नहीं होता है अगर आपका लंबे समय तक EditText दबाएं और आप AutoFill पर क्लिक करें। मुझे here इस बग के बारे में एक बग रिपोर्ट मिली, कृपया एक सितारा जोड़ें और बग रिपोर्ट में अपने अवलोकन भी साझा करें।

धन्यवाद।


मैं इसमें भी भागा। यह बताता है कि इस मुद्दे को TextInputLayout अंदर नेस्टेड नेस्टेड EditText पर संकेत पाठ सेट करने के कारण हुआ था।

मैंने कुछ खुदाई की और 26.0.0 बीटा 2 के रिलीज नोटों में इस डली को पाया। एंड्रॉइड सपोर्ट रिलीज़ नोट्स जून 2017

TextInputLayout को onProvideAutofillStructure () पर संकेत सेट करने होंगे

इसके कारण मुझे नेस्टेड EditText TextInputLayout बजाय TextInputLayout पर संकेत स्थापित करने की कोशिश की गई।

इसने मेरे लिए दुर्घटनाग्रस्त मुद्दे को हल कर दिया। उदाहरण:

<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>

मैंने इसे एक उत्तर के रूप में here पोस्ट किया जैसे मैंने बुकमार्क्स को मिलाया। एक ही उत्तर दो बार पोस्ट करने के लिए क्षमा करें।


मैंने केवल Oreo 8.0.0 के लिए EditText स्टाइल ऑटोफिल को ओवरराइड करने के लिए v26 / themes.xml का उपयोग किया:

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

ध्यान दें कि मुझे प्रभावी होने के लिए अपने लेआउट xml में प्रत्येक EditText के लिए स्टाइल इनलाइन लागू करना था। मैंने अपने ऐप थीम में इस बदलाव को विश्व स्तर पर लागू करने की कोशिश की लेकिन यह किसी कारण से काम नहीं आया।

// 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>






android-textinputlayout