টেক্সটইনপুটএডিটটেক্সট ফোকাস করার ক্ষেত্রে অ্যান্ড্রয়েড 8.0 ওরিও ক্রাশ


102

আমাদের কিছু ডিভাইস অ্যান্ড্রয়েড 8.0 এ আপডেট করার পরে, এর TextInputEditTextঅভ্যন্তরে কোনও ক্ষেত্রের দিকে দৃষ্টি নিবদ্ধ করার 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)

যখন আমরা অ্যান্ড্রয়েড সেটিংস -> সিস্টেম -> ভাষা এবং ইনপুট -> উন্নত -> স্বতঃপূরণ পরিষেবা -> কিছুই না যাই , তারপরে TextInputEditText / TextInputLayoutআর ক্র্যাশ না করে ফোকাস করে ।

ডিভাইসগুলিতে নতুন 8.0 স্বতঃপূরণ পরিষেবাটি অক্ষম না করে কীভাবে আমরা ক্রাশটিকে আটকাতে পারি?


উত্তর:


187

আমি এই মধ্যে দৌড়ে। দেখা যাচ্ছে যে সমস্যাটির EditTextকারণটি নীচের নেস্টে ইঙ্গিত পাঠ্য সেট করে TextInputLayout

আমি কিছু খনন করেছিলাম এবং 26.0.0 বিটা 2 রিলিজ নোটে এই ন্যাগেটটি পেয়েছি। অ্যান্ড্রয়েড সমর্থন রিলিজ নোটস জুন 2017

পাঠ্য ইনপুটলয়েটকে অবশ্যই প্রাইভাইডআউটফিল স্ট্রাকচার () এ ইঙ্গিতগুলি সেট করতে হবে

এটি আমাকে TextInputLayoutনেস্টেডের পরিবর্তে ইঙ্গিতটি সেট করার চেষ্টা করেছিল EditText

এটি আমার জন্য ক্র্যাশিং সমস্যা সমাধান করেছে। উদাহরণ:

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

আমি বুকমার্কগুলি মিশ্রিত করার সাথে সাথে এটি এখানে উত্তর হিসাবে পোস্ট করেছি। একই উত্তর দু'বার পোস্ট করার জন্য দুঃখিত।


এটি কি android.support.design:hintAnimationEn सक्षम এবং android.support.design:hintEnable ছাড়া কাজ করবে? আমি টেক্সটইনপুটআলআউট উত্সটিতে দেখেছি, বৈশিষ্ট্যগুলি লোড করার সময় উভয় বৈশিষ্ট্যই ডিফল্ট হিসাবে সেট করা আছে বলে মনে হচ্ছে।
অ্যান্ড্রয়েডজি

@ অ্যান্ড্রয়েডগুয়ে হ্যাঁ এই বৈশিষ্ট্যগুলি ছাড়া এটি কাজ করা উচিত। এই বৈশিষ্ট্যগুলি টেক্সটআইপুটলয়েটকে সেই আইটেমগুলির জন্য বিন্যাসে স্থান বরাদ্দ করতে বলে (বা কমপক্ষে এটি আমি লক্ষ্য করেছি)
অ্যাজেথথ

@ আজথথ এই সমাধানটি আচরণটি ধরে রাখে না। আমার ক্ষেত্রে, আমি এটি ভাসমান লেবেল অ্যানিমেশনের জন্য ব্যবহার করছি। আমি যখন এটি এভাবে ব্যবহার করি তখন ইঙ্গিত / লেবেল উপস্থিত হয় না। আমি যা দেখতে পাচ্ছি সেগুলিই একটি টেক্সটিনপুট
কৃষ্ণকাএ

@ কৃষ্ণকা যেটি বেশ অদ্ভুত। আমি এই অ্যাপ্লিকেশনটি আমার অ্যাপ্লিকেশনটিতে সর্বত্র ব্যবহার করি এবং এটি উভয়ই সম্পাদনা পাঠ্যের ইঙ্গিতটি দেখায় এবং এটিকে একটি ভাসমান লেবেল হিসাবে অ্যানিমেট করে। আমি নিশ্চিত না যে আপনার সমস্যার কারণ কী হতে পারে। আপনি কি কোনও প্রশ্নে আপনার এক্সএমএল লেআউটের কোড নমুনা পোস্ট করতে এবং আমাকে এটিতে লিঙ্ক করতে পারেন? আমি চেষ্টা করে সহায়তা করতে খুশি হব।
আজথোথ

এটি আপনার উত্তর পোস্ট হিসাবে একই। আমি যে ডিভাইসটির জন্য পরীক্ষা করেছিলাম তা হুয়াওয়ে
কৃষ্ণকাএ

25

আপনার নীচে উল্লিখিত গুণাবলী যুক্ত করুন EditText:

android:importantForAutofill="noExcludeDescendants"


বৈশিষ্ট্যটি কেবলমাত্র এপিআই 26 এর জন্যই কি কোনও সমাধান আছে যদি আপনার নূন্যতম এপিআই 26 টিরও কম হয়?
JPM

4
@ জেপিএম কোনও উদ্বেগ নয়, এটি কেবল পুরানো এপিআই স্তরে উপেক্ষা করা যাতে ক্রাশ হবে না বা সমস্যা হবে না।
পেই

4
@ জেপিএম ইস্যুটি কেবল ওরিওতে রয়েছে, সুতরাং এটি পুরানো এপিআইগুলির জন্য উপেক্ষা করা হবে এবং তাদের ক্রাশ হবে না।
গৌরব সিং

আমার অ্যাপ্লিকেশনটিতে এখন এটি প্রডে রয়েছে মনে হচ্ছে ঠিক ঠিক কাজ করছে
জেপিএম

4
এটি ভুল সমাধান। আপনি যখন সম্পাদনা পাঠ্যে দীর্ঘক্ষণ টিপেন এবং মেনু থেকে স্বতঃপূর্ণ নির্বাচন করেন এটি ক্রাশ হয় ras : সঠিক (যদিও প্রয়োজন কোড) সমাধান stackoverflow.com/a/46698028/1714102
Przemo

11

লুক সিম্পসন প্রায় এটি ঠিক করেছেন, কেবল "থিমস.এক্সএমএল" এর পরিবর্তে "স্টাইল.এক্সএমএল" ব্যবহার করা উচিত।

আমি আরও পরিষ্কার করার জন্য সংস্করণ বাছাইকারী সহ একটি নতুন স্টাইলের ফাইল তৈরি করেছি, যার অর্থ ভি 26 রয়েছে।
কেবল আপনার AppThemev26 / styles.xML এর জন্য অনুলিপি করুন এবং আটকান এবং স্টাইলটি 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>

আপনার বিন্যাসের ফাইলগুলি পরিবর্তন করার প্রয়োজন ছাড়াই আপনি আপনার সমস্ত এডিটেক্সটসের জন্য এই পরিবর্তনগুলি করেন ।


4
ন্যূনতম এপিআই প্রয়োজনীয়তা নোট করবে, v26 রিসোর্স ফোল্ডারে রাখার প্রয়োজন হবে।
স্টারউইন্ড 0

6

আপনি এডিটেক্সট ফোকাস করার সময় এনপিইর জন্য এটি স্টাইলের সাহায্যে এক্সআরএল বা এক্সএমএলে গুরুত্বপূর্ণ ফরওয়ার্টআউটফুলের জন্য কোনও মান সেট করতে পারেন তবে আপনার দীর্ঘকাল এডিটেক্সট টিপুন এবং আপনি অটোফিলের উপর ক্লিক করলে এটি ঠিক হয় না। আমি এখানে এই বাগ সম্পর্কে একটি বাগ রিপোর্ট পেয়েছি , দয়া করে একটি তারা যুক্ত করুন এবং আপনার পর্যবেক্ষণগুলি বাগের প্রতিবেদনেও ভাগ করুন share

ধন্যবাদ.


5

আমি শুধুমাত্র ওরিও 8.0.0 এর জন্য সম্পাদনা পাঠ্য শৈলী অটোফিলকে ওভাররাইড করতে v26 /ums.xml ব্যবহার করেছি:

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

দ্রষ্টব্য যে এটি কার্যকর হওয়ার জন্য আমাকে আমার লেআউট এক্সএমএলে প্রতিটি সম্পাদনা পাঠের জন্য স্টাইলের ইনলাইনটি প্রয়োগ করতে হয়েছিল। আমি আমার অ্যাপ্লিকেশন থিমে বিশ্বব্যাপী এই পরিবর্তনটি প্রয়োগ করার চেষ্টা করেছি তবে এটি কোনও কারণে কার্যকর হয়নি।

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

0

@ লুক সিম্পসন ঠিক আছে। আপনি এটি থিমগুলিতে ব্যবহার করতে পারেন X এক্সএমএল পছন্দ করুন: -

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

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

ভি 26 / অ্যাপ_স্টাইল.এক্সএমএল

তবে, আমাকে ডিফল্ট ফোল্ডারে অ্যাপ_ স্টাইল.এক্সএমএলে খালি ট্যাগও রাখতে হয়েছিল। অন্যথায়, সম্পাদনা পাঠ্যের সমস্ত বৈশিষ্ট্য এটি দ্বারা ওভাররাইড হয়ে উঠছিল এবং আমার সম্পাদনা পাঠ্যটি সঠিকভাবে কাজ করছে না। এবং আপনি যখন 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-এ স্থির করা হয়েছে।


0

যে কেউ এখনও "চায় ইঙ্গিতটি " "মধ্যে TextInputEditText " করে hintEnabled = "মিথ্যা": অ্যাপ্লিকেশন মধ্যে TextInputLayout

<com.google.android.material.textfield.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:hintEnabled="false"
    app:passwordToggleEnabled="true">

    <com.google.android.material.textfield.TextInputEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="password"
        android:inputType="textPassword" />

</com.google.android.material.textfield.TextInputLayout>

0

আমিও এই সমস্যার মুখোমুখি হয়েছি এবং শেষ পর্যন্ত আমরা অ্যান্ড্রয়েড 8.0 এবং অ্যান্ড্রয়েড 8.1 এ ক্র্যাশ হওয়ার কারণ পেয়েছি।

প্রথম কারণ (গুরুত্বপূর্ণ সূত্র): এক্সএমএল খালি ইঙ্গিত (অ্যান্ড্রয়েড: ইঙ্গিত = "") ওরিও ডিভাইসে ক্রাশের দিকে নিয়ে যায় lease দয়া করে পুরো প্রকল্প অনুসন্ধানে এডিটেক্সটে এই ফাঁকা ইঙ্গিতটি সরান।

দ্বিতীয় কারণ (উপরে বর্ণিত হিসাবে একই): আপনি যদি টেক্সটইনপুট লেআউট ব্যবহার করেন তবে আপনার সম্পাদনা পাঠ্য ইঙ্গিতটি পাঠ্য ইনপুটলয়েটের অভ্যন্তরে প্রদর্শিত হবে তা নিশ্চিত করুন অন্যথায় আপনি সম্পাদনা পাঠের অভ্যন্তরে ইঙ্গিতটি ব্যবহার করতে পারেন।

আশা করি এটি আপনাকে সাহায্য করবে !!

ধন্যবাদ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.