android - TextInputLayout.setError() ত্রুটি সাফ করার পরে খালি জায়গা ছেড়ে দেয়




android-textinputlayout (6)

আমি পুনরাবৃত্তি কোড এবং ওভাররাইড setError পদ্ধতি এড়ানোর জন্য একটি কাস্টম ভিউ তৈরি করি।

    public class UserInputView extends TextInputLayout {

        public UserInputView(Context context) {
           this(context, null);
        }

        public UserInputView(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }

        public UserInputView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }

        @Override
        public void setError(@Nullable CharSequence error) {
            boolean isErrorEnabled = error != null;
            setErrorEnabled(isErrorEnabled);
            super.setError(error);
        }

     }

আমি সম্প্রতি TextInputLayout ব্যবহার TextInputLayout এবং এটি setError() পদ্ধতি। আমি যে সমস্যাটি পাচ্ছি তা হ'ল আমি যখন সেট setError(null) কল করে ত্রুটিটি পরিষ্কার করি তখন এটি নীচের অংশে অনেকটা ফাঁকা জায়গা ছেড়ে যায়।

সাধারন:

ত্রুটি সহ:

ত্রুটি সাফ করার পরে:

উত্সটি দেখার পরে আমি দেখতে পেলাম যে তারা INVISIBLE পরিবর্তে দৃষ্টিভঙ্গিটিকে INVISIBLE তৈরি করছে

.setListener(new ViewPropertyAnimatorListenerAdapter() {
@Override
public void onAnimationEnd(View view) {
    view.setVisibility(INVISIBLE); // here it is

    updateLabelVisibility(true);
} }).start();

আমি ভাবছি কেন এমন হয়? খালি জায়গা এড়াতে এটি কীভাবে সমাধান করবেন?


এর জন্য দস্তাবেজগুলি পরীক্ষা করে দেখুন

public void setErrorEnabled (boolean enabled)

এটা বলে

এই লেআউটে ত্রুটির কার্যকারিতা সক্ষম রয়েছে কি না। সেটএররারের মাধ্যমে একটি ত্রুটি বার্তা স্থাপনের আগে এই কার্যকারিতা সক্ষম করা (চারসিকোয়েন্স) এর অর্থ হ'ল কোনও ত্রুটি প্রদর্শিত হলে এই বিন্যাসটি আকার পরিবর্তন করবে না।

ভাল এর উপর ভিত্তি করে, setErrorEnabled(true) আগে setError() setErrorEnabled(true) সেট করার চেষ্টা করুন, এবং setError(null) পরে setError(null) setErrorEnabled(false) সেট করুন।


তারপরে আপনার এটিকে ওভাররাইড করা উচিত:

@Override
public void onAnimationEnd(View view)
{
    view.setVisibility(GONE); // <-- this is where you make it GONE

    updateLabelVisibility(true); 
}

বা এটি চেষ্টা করুন যেমন একটি বোতামে বা যা ব্যবহার করছেন তা:

final Button btn = (Button) findViewById(R.id.btn);
btn.setVisibility(View.GONE); //<--- makes the button gone

পদ্ধতি setErrorEnabled(false) অতিরিক্ত স্থান সাফ করবে, সুতরাং setError(null) পরে এটি কল করুন setError(null)


this পৃষ্ঠাটি দেখুন। গুগল ভবিষ্যতের সমর্থন লাইব্রেরি সংস্করণে এই সমাধানটি প্রকাশ করবে। এটা বলে,

আপনি যদি এখনই এটি ঠিক করতে চান তবে আপনি TextInputLayout প্রসারিত করতে পারেন এবং setErrorEnabled() পদ্ধতিটি ওভাররাইড করতে পারেন, তবে আমি পশ্চাদপটে সামঞ্জস্যের গ্যারান্টি দিতে পারি না। কারণ এটি TextInputLayout রাষ্ট্র পরিবর্তন করার কিছুটা বিপদ।

public class TextInputLayout extends android.support.design.widget.TextInputLayout{


    public TextInputLayout(Context context) {
        super(context);
    }

    public TextInputLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public TextInputLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void setErrorEnabled(boolean enabled) {
        super.setErrorEnabled(enabled);
        if (enabled) {
            return;
        }
        if (getChildCount() > 1) {
            View view = getChildAt(1);
            if (view != null) {
                view.setVisibility(View.GONE);
            }
        }
    }
}

mTextInputLayout.setErrorEnabled(false); ব্যবহার করে mTextInputLayout.setErrorEnabled(false); আমি এই সমস্যা সমাধান করেছি







android-textinputlayout