android TextInputEditText पर ध्यान केंद्रित करने पर एंड्रॉइड 8.0 ओरेओ क्रैश




android-edittext android-8.0-oreo (5)

@ ल्यूक सिम्पसन सही है। आप इसे विषयों में इस्तेमाल कर सकते हैं। एक्सएमएल जैसे: -

<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 के लिए महत्वपूर्ण ForAutoFill प्रॉपर्टी डालते हैं और आप 8.1 में ऑटोफिल काम करना चाहते हैं, तो आप बस रख सकते हैं

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

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

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

जब हम एंड्रॉइड सेटिंग्स पर जाते हैं -> सिस्टम -> भाषाएं और इनपुट -> उन्नत -> स्वत: भरण सेवा -> कोई नहीं , फिर TextInputEditText / TextInputLayout पर फ़ोकस करना अब क्रैश नहीं होता है।

डिवाइस पर नई 8.0 ऑटो-फिल सेवा को अक्षम किए बिना हम क्रैश को कैसे रोक सकते हैं?


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

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

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

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

मैं भी इसमें भाग गया। यह पता चला है कि समस्या TextInputLayout अंदर नेस्टेड टेक्स्ट पर संकेत टेक्स्ट सेट करके हुई थी।

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

TextInputLayout को ऑनवाइडऑटफिलस्ट्रक्चर () पर संकेत सेट करना होगा

इससे मुझे नेस्टेड 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>

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


ल्यूक सिम्पसन लगभग इसे सही बनाते हैं, बस "themes.xml" के बजाय "styles.xml" का उपयोग करना चाहिए।

मैंने संस्करण क्वालीफायर के साथ एक नई शैली फ़ाइल बनाई, जिसका उद्देश्य इसे स्पष्ट बनाने के लिए v26 करना है।
V26 / styles.xml के लिए बस अपनी AppTheme कॉपी और पेस्ट करें और editTextStyle आइटम को 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>

इस तरह आप अपनी लेआउट फ़ाइलों को बदलने की आवश्यकता के बिना अपने सभी संपादन टेक्स्ट के लिए यह परिवर्तन करते हैं।


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

धन्यवाद।





android-textinputlayout