Android এ EditText এর পাঠ্য দৈর্ঘ্য সীমাবদ্ধ করুন




android-edittext maxlength (12)

Goto10 এর পর্যবেক্ষণের কারণে, আমি সর্বাধিক দৈর্ঘ্য সেটিং সহ অন্যান্য ফিল্টারগুলি হ্রাস করার সুরক্ষায় নিম্নলিখিত কোডটি একসাথে রাখি:

/**
 * This sets the maximum length in characters of an EditText view. Since the
 * max length must be done with a filter, this method gets the current
 * filters. If there is already a length filter in the view, it will replace
 * it, otherwise, it will add the max length filter preserving the other
 * 
 * @param view
 * @param length
 */
public static void setMaxLength(EditText view, int length) {
    InputFilter curFilters[];
    InputFilter.LengthFilter lengthFilter;
    int idx;

    lengthFilter = new InputFilter.LengthFilter(length);

    curFilters = view.getFilters();
    if (curFilters != null) {
        for (idx = 0; idx < curFilters.length; idx++) {
            if (curFilters[idx] instanceof InputFilter.LengthFilter) {
                curFilters[idx] = lengthFilter;
                return;
            }
        }

        // since the length filter was not part of the list, but
        // there are filters, then add the length filter
        InputFilter newFilters[] = new InputFilter[curFilters.length + 1];
        System.arraycopy(curFilters, 0, newFilters, 0, curFilters.length);
        newFilters[curFilters.length] = lengthFilter;
        view.setFilters(newFilters);
    } else {
        view.setFilters(new InputFilter[] { lengthFilter });
    }
}

Android এ EditText এর পাঠ্য দৈর্ঘ্য সীমাবদ্ধ করার সেরা উপায় কী?

এক্সএমএল মাধ্যমে এই কাজ করার একটি উপায় আছে?


XML ফাইলটিতে নিম্নলিখিত সংজ্ঞা যুক্ত করে আপনি এটি অর্জন করতে পারেন:

<EditText
    android:id="@+id/input"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:inputType="number"
    android:maxLength="6"
    android:hint="@string/hint_gov"
    android:layout_weight="1"/>

এটি সম্পাদনা অক্ষরের সর্বাধিক দৈর্ঘ্যকে 6 অক্ষরে সীমাবদ্ধ করবে।


আপনি android:maxLength="10" ব্যবহার করতে পারেন android:maxLength="10" । (এখানে সীমা 10 টি অক্ষর পর্যন্ত)


আমি অনেক ভাল সমাধান দেখেছি, তবে আমি যা মনে করি তা আরো সম্পূর্ণ এবং ব্যবহারকারী বান্ধব সমাধান হিসাবে দিতে চাই, এতে অন্তর্ভুক্ত রয়েছে:

1, দৈর্ঘ্য দৈর্ঘ্য।
2, আরো ইনপুট, আপনার টোস্ট ট্রিগার ট্রিগার একটি কলব্যাক দিন।
3, কার্সার মাঝখানে বা পুচ্ছ হতে পারে।
4, ব্যবহারকারী একটি স্ট্রিং পেস্ট দ্বারা ইনপুট করতে পারেন।
5, সর্বদা ওভারফ্লো ইনপুট বাতিল এবং মূল রাখা।

public class LimitTextWatcher implements TextWatcher {

    public interface IF_callback{
        void callback(int left);
    }

    public IF_callback if_callback;

    EditText editText;
    int maxLength;

    int cursorPositionLast;
    String textLast;
    boolean bypass;

    public LimitTextWatcher(EditText editText, int maxLength, IF_callback if_callback) {

        this.editText = editText;
        this.maxLength = maxLength;
        this.if_callback = if_callback;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        if (bypass) {

            bypass = false;

        } else {

            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append(s);
            textLast = stringBuilder.toString();

            this.cursorPositionLast = editText.getSelectionStart();
        }
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void afterTextChanged(Editable s) {
        if (s.toString().length() > maxLength) {

            int left = maxLength - s.toString().length();

            bypass = true;
            s.clear();

            bypass = true;
            s.append(textLast);

            editText.setSelection(this.cursorPositionLast);

            if (if_callback != null) {
                if_callback.callback(left);
            }
        }

    }

}


edit_text.addTextChangedListener(new LimitTextWatcher(edit_text, MAX_LENGTH, new LimitTextWatcher.IF_callback() {
    @Override
    public void callback(int left) {
        if(left <= 0) {
            Toast.makeText(MainActivity.this, "input is full", Toast.LENGTH_SHORT).show();
        }
    }
}));

আমি কী করতে ব্যর্থ হলাম, যদি ব্যবহারকারী বর্তমান ইনপুটটির একটি অংশ হাইলাইট করে এবং একটি দীর্ঘ লম্বা স্ট্রিং আটকে দেওয়ার চেষ্টা করে, তবে আমি কীভাবে হাইলাইটটি পুনরুদ্ধার করতে পারি তা জানি না।

যেমন, সর্বাধিক দৈর্ঘ্য 10, ব্যবহারকারী ইনপুট '12345678', এবং হাইলাইট হিসাবে '345' চিহ্নিত করুন, এবং '0000 'এর একটি স্ট্রিং আটকাতে চেষ্টা করুন যা সীমা অতিক্রম করবে।

যখন আমি origin_text.setSelection (start = 2, end = 4) ব্যবহার করার চেষ্টা করি তখন মূল অবস্থাটি পুনরুদ্ধার করতে, ফলাফল হল, এটি কেবলমাত্র 1২ টি স্থান '12 345 678' হিসাবে সন্নিবেশ করান, মূল উত্সাহ নয়। আমি কেউ যে সমাধান চাই।


ইতিমধ্যে একটি কাস্টম ইনপুট ফিল্টার ব্যবহার করে এমন লোকেদের একটি নোট এবং সর্বোচ্চ দৈর্ঘ্য সীমাবদ্ধ করতে চান:

যখন আপনি কোডে ইনপুট ফিল্টারগুলি বরাদ্দ করেন তখন পূর্বে সেট ইনপুট ফিল্টারগুলি সাফ করা হয়, android:maxLength সাথে একটি সেট সহ android:maxLength । আমরা এমন কিছু অক্ষর ব্যবহার প্রতিরোধ করতে কাস্টম ইনপুট ফিল্টারটি ব্যবহার করার চেষ্টা করার সময় এটি খুঁজে পেয়েছি যা আমরা কোনও পাসওয়ার্ড ক্ষেত্রে অনুমতি দিই না। SetFilters সঙ্গে ফিল্টার সেট করার পরে maxLength আর পালন করা হয়। সমাধান প্রোগ্রামলিকভাবে একসঙ্গে maxLength এবং আমার কাস্টম ফিল্টার সেট করা ছিল। এটার মতো কিছু:

myEditText.setFilters(new InputFilter[] {
        new PasswordCharFilter(), new InputFilter.LengthFilter(20)
});

এই জরিমানা কাজ করে ...

android:maxLength="10"

এই শুধুমাত্র 10 অক্ষর গ্রহণ করবে।


এটা এক্সএমএল সহজ উপায়:

android:maxLength="4"

আপনি যদি এক্সএমএল সম্পাদনা-পাঠ্য 4 অক্ষর সেট করার প্রয়োজন হয়, তাই এই ব্যবহার করুন

<EditText
    android:id="@+id/edtUserCode"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxLength="4"
    android:hint="Enter user code" />

এটি একটি কাস্টম সম্পাদনা পাঠ্য ক্লাস যা দৈর্ঘ্য ফিল্টারগুলিকে অন্যান্য ফিল্টারগুলির সাথে লাইভ করতে অনুমতি দেয়। টিম Gallagher এর উত্তর ধন্যবাদ (নীচে)

import android.content.Context;
import android.text.InputFilter;
import android.util.AttributeSet;
import android.widget.EditText;


public class EditTextMultiFiltering extends EditText{

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

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

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

    public void setMaxLength(int length) {
        InputFilter curFilters[];
        InputFilter.LengthFilter lengthFilter;
        int idx;

        lengthFilter = new InputFilter.LengthFilter(length);

        curFilters = this.getFilters();
        if (curFilters != null) {
            for (idx = 0; idx < curFilters.length; idx++) {
                if (curFilters[idx] instanceof InputFilter.LengthFilter) {
                    curFilters[idx] = lengthFilter;
                    return;
                }
            }

            // since the length filter was not part of the list, but
            // there are filters, then add the length filter
            InputFilter newFilters[] = new InputFilter[curFilters.length + 1];
            System.arraycopy(curFilters, 0, newFilters, 0, curFilters.length);
            newFilters[curFilters.length] = lengthFilter;
            this.setFilters(newFilters);
        } else {
            this.setFilters(new InputFilter[] { lengthFilter });
        }
    }
}

Material.io থেকে, আপনি TextInputEditText ব্যবহার করতে পারেন TextInputEditText মিলিত:

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

    <com.google.android.material.textfield.TextInputEditText
        android:id="@+id/edit_text"
        android:hint="@string/description"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:maxLength="1000"
        android:gravity="top|start"
        android:inputType="textMultiLine|textNoSuggestions"/>

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

আপনি ড্র্যাগযোগ্য সঙ্গে একটি সম্পাদনা EditText কনফিগার করতে পারেন:

অথবা আপনি কাউন্টারের সাথে / লিখিত দৈর্ঘ্য সীমিত করতে পারেন:

নির্ভরতা:

implementation 'com.google.android.material:material:1.1.0-alpha02'

xml

android:maxLength="10"

জাভা:

InputFilter[] editFilters = editText.getFilters();
InputFilter[] newFilters = new InputFilter[editFilters.length + 1];
System.arraycopy(editFilters, 0, newFilters, 0, editFilters.length);
newFilters[editFilters.length] = new InputFilter.LengthFilter(maxLength);
editText.setFilters(newFilters);

Kotlin:

editText.filters += InputFilter.LengthFilter(maxLength)

EditText editText = new EditText(this);
int maxLength = 3;    
editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLength)});

TextView tv = new TextView(this);
tv.setFilters(new InputFilter[]{ new InputFilter.LengthFilter(250) });






maxlength