অ্যান্ড্রয়েড এডিটেক্সটের পাঠ্য দৈর্ঘ্য সীমাবদ্ধ করার সর্বোত্তম উপায় কী


700

EditTextঅ্যান্ড্রয়েডে পাঠ্যের দৈর্ঘ্য সীমাবদ্ধ করার সর্বোত্তম উপায় কী ?

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


1
আমি আমার সম্পাদনা পাঠের জন্য সর্বাধিক সংখ্যক অক্ষর সেট করতে চেয়েছিলাম। প্রথমে এটি স্পষ্ট ছিল না যে পাঠ্য দৈর্ঘ্যের সীমা একই ছিল। (অন্য বিভ্রান্ত ভ্রমণকারীদের জন্য কেবল একটি নোট)।
ক্যাটেড্রাল পিলন

সঠিক উত্তর এখানে : stackoverflow.com/a/19222238/276949 । এই উত্তরটি দৈর্ঘ্যকে সীমাবদ্ধ করে এবং কোনও বাফারকে সীমাবদ্ধতার পরে আঘাত করার পরে ক্রমাগত পূরণ করা থেকে বাধা দেয়, তাই আপনার ব্যাকস্পেস কীটি সঠিকভাবে কাজ করতে দেয়।
মার্টিন কোনেকেনি

উত্তর:


1378

নথিপত্র

উদাহরণ

android:maxLength="10"

26
ডি আহা! আমার সাথেও একই ঘটনা ঘটেছে. আমি কোডটি দেখছিলাম, এবং সেখানে কোনও সেটম্যাক্স লেন্থ পদ্ধতি নেই।
এইচপিক

1
এখানে চেক কি করে? এটি কেবল এই পৃষ্ঠায় লিঙ্ক।
ঘুম কি?

5
@ ভিনসি, আপনি ভুল maxLengthসম্পত্তি এখনও কাজ করে।
আশীষদহ

6
এটির android:maxLengthসমতুল্য সচেতন থাকুন InputFilter.LengthFilter, সুতরাং যখন প্রোগ্রামিকভাবে এটির ফিল্টার পরিবর্তন করা হয়, আপনি এর এক্সএমএল ফিল্টারটিও সংশোধন করেছেন।
এমআর 5

20
যে লোকেরা বলে যে এটি কাজ করে না, তাদের পক্ষে সচেতন হোন যে কল করা কাজ setFiltersবন্ধ করবে android:maxLength, কারণ এটি এক্সএমএল দ্বারা সেট করা ফিল্টারটিকে ওভাররাইট করে। অন্য কথায়, আপনি যদি কোনও ফিল্টার প্রোগ্রামক্রমে সেট করেন তবে আপনাকে অবশ্যই সেগুলি সমস্ত প্রোগ্রামিয়েটিকভাবে সেট করতে হবে।
ইয়ান নিউজনে

339

একটি পাঠ্য দৃশ্যের সর্বাধিক দৈর্ঘ্য সীমাবদ্ধ করতে একটি ইনপুট ফিল্টার ব্যবহার করুন।

TextView editEntryView = new TextView(...);
InputFilter[] filterArray = new InputFilter[1];
filterArray[0] = new InputFilter.LengthFilter(8);
editEntryView.setFilters(filterArray);

5
যদি ইতিমধ্যে কেউ কিছু তৈরি করে থাকে তবে এটি খুব কার্যকর InputFilter। এটি android:maxlengthএক্সএমএল ফাইলে ওভাররাইড করে, সুতরাং আমাদের LengthFilterএইভাবে যুক্ত করা দরকার ।
সেব্লিস

আমি মনে করি আপনার উত্তরটি সেরা উত্তর, যেহেতু এটি আরও গতিশীল, +1
মুহান্নাদ এ.আলহারিরি

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

এটি অ্যান্ড্রয়েড এটি এক্সএমএল এর সাথে করার মতো করে similar
নিকোলাস টেলার

4
আমি কীভাবে ন্যূনতম দৈর্ঘ্য নির্ধারণ করতে পারি?
আখিলা মাদারী

@AkhilaMadari, সম্ভবত সঙ্গে TextWatcher
কুলমাইন্ড

65

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

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

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

5
আপনি বিদ্যমান ফিল্টারগুলি প্রথমে ইনপুটফিলার হিসাবে পুনরুদ্ধার করতে পারেন [] বিদ্যমান ফিল্টারগুলি = editText.getFilters (); তারপরে এই বিদ্যমান ফিল্টারগুলির সাথে আপনার ফিল্টার যুক্ত করুন
subair_a

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

7
অবশ্যই, কেবল অ্যান্ড্রয়েডের জন্য
VAdaihiep

27

আমার এই সমস্যাটি হয়েছে এবং আমি বিবেচনা করছি যে আমরা ইতিমধ্যে সেট করা ফিল্টারগুলি না হারিয়ে প্রোগ্রামালিকভাবে এটি করার একটি সুস্পষ্টভাবে ব্যাখ্যা করছি।

এক্সএমএলে দৈর্ঘ্য নির্ধারণ:

যেমন গৃহীত উত্তরটি সঠিকভাবে বলেছে, আপনি যদি ভবিষ্যতে আর পরিবর্তন করতে পারবেন না এমন একটি সম্পাদনা পাঠের একটি নির্দিষ্ট দৈর্ঘ্য সংজ্ঞায়িত করতে চান তবে আপনার সম্পাদনা পাঠের এক্সএমএলে সংজ্ঞা দিন:

android:maxLength="10" 

প্রোগ্রামটিমে দৈর্ঘ্য নির্ধারণ করা হচ্ছে

প্রোগ্রামালমে দৈর্ঘ্য সেট করতে আপনাকে এটি একটি মাধ্যমে নির্ধারণ করতে হবে InputFilter। তবে আপনি যদি একটি নতুন ইনপুটফিল্টার তৈরি করেন এবং সেট করে রাখেন তবে EditTextআপনি ইতিমধ্যে অন্য সমস্ত সংজ্ঞায়িত ফিল্টার (যেমন ম্যাক্সলাইনস, ইনপুট টাইপ, ইত্যাদি) হারাবেন যা আপনি এক্সএমএল এর মাধ্যমে বা প্রোগ্রামক্রমে যুক্ত করেছেন।

সুতরাং এটি ভুল :

editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLength)});

পূর্বে যুক্ত ফিল্টারগুলি হারাতে এড়াতে আপনার এই ফিল্টারগুলি নেওয়া দরকার, নতুন একটি যুক্ত করুন (এই ক্ষেত্রে সর্বোচ্চ দৈর্ঘ্য) এবং ফিল্টারগুলি নীচের EditTextহিসাবে সেট করুন :

জাভা

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

কোটলিন তবে এটি সবার জন্য সহজ করে দিয়েছে, আপনার ইতিমধ্যে বিদ্যমান ফিল্টারগুলিতেও ফিল্টার যুক্ত করতে হবে তবে আপনি সাধারণের সাহায্যে এটি অর্জন করতে পারেন:

editText.filters += InputFilter.LengthFilter(maxLength)

23

এটি কীভাবে অর্জন করতে হয় তা নিয়ে অন্য কারও জন্য ভাবছেন, এখানে আমার বর্ধিত EditTextশ্রেণি রয়েছে EditTextNumeric

.setMaxLength(int) - সর্বাধিক সংখ্যা নির্ধারণ করে

.setMaxValue(int) - সর্বাধিক পূর্ণসংখ্যার মান সীমাবদ্ধ করুন

.setMin(int) - সর্বনিম্ন পূর্ণসংখ্যার মান সীমাবদ্ধ করুন

.getValue() - পূর্ণসংখ্যার মান পান

import android.content.Context;
import android.text.InputFilter;
import android.text.InputType;
import android.widget.EditText;

public class EditTextNumeric extends EditText {
    protected int max_value = Integer.MAX_VALUE;
    protected int min_value = Integer.MIN_VALUE;

    // constructor
    public EditTextNumeric(Context context) {
        super(context);
        this.setInputType(InputType.TYPE_CLASS_NUMBER);
    }

    // checks whether the limits are set and corrects them if not within limits
    @Override
    protected void onTextChanged(CharSequence text, int start, int before, int after) {
        if (max_value != Integer.MAX_VALUE) {
            try {
                if (Integer.parseInt(this.getText().toString()) > max_value) {
                    // change value and keep cursor position
                    int selection = this.getSelectionStart();
                    this.setText(String.valueOf(max_value));
                    if (selection >= this.getText().toString().length()) {
                        selection = this.getText().toString().length();
                    }
                    this.setSelection(selection);
                }
            } catch (NumberFormatException exception) {
                super.onTextChanged(text, start, before, after);
            }
        }
        if (min_value != Integer.MIN_VALUE) {
            try {
                if (Integer.parseInt(this.getText().toString()) < min_value) {
                    // change value and keep cursor position
                    int selection = this.getSelectionStart();
                    this.setText(String.valueOf(min_value));
                    if (selection >= this.getText().toString().length()) {
                        selection = this.getText().toString().length();
                    }
                    this.setSelection(selection);
                }
            } catch (NumberFormatException exception) {
                super.onTextChanged(text, start, before, after);
            }
        }
        super.onTextChanged(text, start, before, after);
    }

    // set the max number of digits the user can enter
    public void setMaxLength(int length) {
        InputFilter[] FilterArray = new InputFilter[1];
        FilterArray[0] = new InputFilter.LengthFilter(length);
        this.setFilters(FilterArray);
    }

    // set the maximum integer value the user can enter.
    // if exeeded, input value will become equal to the set limit
    public void setMaxValue(int value) {
        max_value = value;
    }
    // set the minimum integer value the user can enter.
    // if entered value is inferior, input value will become equal to the set limit
    public void setMinValue(int value) {
        min_value = value;
    }

    // returns integer value or 0 if errorous value
    public int getValue() {
        try {
            return Integer.parseInt(this.getText().toString());
        } catch (NumberFormatException exception) {
            return 0;
        }
    }
}

ব্যবহারের উদাহরণ:

final EditTextNumeric input = new EditTextNumeric(this);
input.setMaxLength(5);
input.setMaxValue(total_pages);
input.setMinValue(1);

প্রয়োগ করা অন্যান্য সমস্ত পদ্ধতি এবং বৈশিষ্ট্য EditTextঅবশ্যই কাজ করে।


1
আমরা এটি এক্সএমএল লেআউটে যুক্ত করলে ভাল হয়। এক্সএমএল দ্বারা ব্যবহৃত হয়ে যখন আমি এর সাথে ত্রুটি পাচ্ছি: android.view.InflateException: বাইনারি এক্সএমএল ফাইল লাইন # 47: শ্রেণি সঞ্চারিত ত্রুটি com.p যাত্রী.উকাবস.ইটিলেটস.এডিটটেক্সট সংখ্যাসূচক
শিহাব উদ্দিন

@ মার্টিনাস শিহাব_রেটের মতো একই ত্রুটি পেয়েছেন?
প্রাণেশর্মা

17

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

/**
 * 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 });
    }
}

3
আপনি কোডটি কিছুটা আপডেট করতে চাইতে পারেন want বরাদ্দ হওয়া অ্যারেটি curFilters.length + 1 আকারে হওয়া দরকার এবং আপনি নতুন ফিল্টার তৈরির পরে, আপনি নতুন বরাদ্দ করা অ্যারেটিতে "এটি" সেট করেননি। ইনপুটফিল্টার নতুন ফিল্টারস [] = নতুন ইনপুটফিল্টার [কারফিল্টারস দৈর্ঘ্য + 1]; System.arraycopy (curFilters, 0, newFilters, 0, curFilters.length); this.setFilters (newFilters);
জাভা কোডারএক্স

15
//Set Length filter. Restricting to 10 characters only
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(MAX_LENGTH)});

//Allowing only upper case characters
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});

//Attaching multiple filters
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(MAX_LENGTH), new InputFilter.AllCaps()});

12

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)

8

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

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

এটি EditTextউইজেটের সর্বোচ্চ দৈর্ঘ্যটি 6 টি অক্ষরে সীমাবদ্ধ করবে ।


6

মেটিরিয়াল.ও থেকে , আপনি এর TextInputEditTextসাথে মিলিত ব্যবহার করতে পারেন TextInputLayout:

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

আপনি অঙ্কনযোগ্য সহ একটি পাসওয়ার্ড সম্পাদনা পাঠ্য কনফিগার করতে পারেন:

পাসওয়ার্ড উদাহরণ

অথবা আপনি কাউন্টার ছাড়াই / ছাড়াই পাঠ্য দৈর্ঘ্য সীমাবদ্ধ করতে পারেন:

পাল্টা উদাহরণ

নির্ভরতা:

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

6

এক্সএমএল

android:maxLength="10"

প্রোগ্রামেটিক্যালি:

int maxLength = 10;
InputFilter[] filters = new InputFilter[1];
filters[0] = new InputFilter.LengthFilter(maxLength);
yourEditText.setFilters(filters);

দ্রষ্টব্য: অভ্যন্তরীণভাবে, সম্পাদনা পাঠ্য ও পাঠ্যদর্শন android:maxLengthএক্সএমএল এর মানটিকে বিশ্লেষণ করে InputFilter.LengthFilter()এটি প্রয়োগ করতে ব্যবহার করুন ।

দেখুন: টেক্সটভিউ.জভা # L1564


2

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

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 });
        }
    }
}

2

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

android:maxLength="4"

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

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


2

প্রোগ্রামের জন্য জাভা জন্য এটি চেষ্টা করুন :

myEditText(new InputFilter[] {new InputFilter.LengthFilter(CUSTOM_MAX_LEN)});

1
আপনি পদ্ধতিটি কল করতে ভুলে গেছেন তাই দেখতে এটির মতো হওয়া উচিত:myEditText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(CUSTOM_MAX_LEN)});
স্টিভেনটিবি

1

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

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' এর একটি স্ট্রিং পেস্ট করার চেষ্টা করুন যা সীমাবদ্ধতা ছাড়িয়ে যাবে।

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


1

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


0

Kotlin:

edit_text.filters += InputFilter.LengthFilter(10)

ZTE Blade A520অদ্ভুত প্রভাব আছে। আপনি যখন 10 টিরও বেশি প্রতীক টাইপ করেন (উদাহরণস্বরূপ, 15), EditTextপ্রথম 10 দেখায়, তবে অন্যান্য 5 টি দৃশ্যমান নয় এবং অ্যাক্সেসযোগ্য নয়। কিন্তু যখন আপনার সাথে ডিলিট প্রতীক Backspace, এটা প্রথম ডান 5 প্রতীক মুছে ফেলে এবং তারপর অবশিষ্ট 10. এই আচরণ ব্যবহার কাটিয়ে উঠতে সরিয়ে ফেলা হবে একটি সমাধান :

android:inputType="textNoSuggestions|textVisiblePassword"
android:maxLength="10"

অথবা এটা:

android:inputType="textNoSuggestions"

বা এটি, যদি আপনি পরামর্শ নিতে চান:

private class EditTextWatcher(private val view: EditText) : TextWatcher {
    private var position = 0
    private var oldText = ""

    override fun afterTextChanged(s: Editable?) = Unit

    override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
        oldText = s?.toString() ?: ""
        position = view.selectionStart
    }

    override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
        val newText = s?.toString() ?: ""
        if (newText.length > 10) {
            with(view) {
                setText(oldText)
                position = if (start > 0 && count > 2) {
                    // Text paste in nonempty field.
                    start
                } else {
                    if (position in 1..10 + 1) {
                        // Symbol paste in the beginning or middle of the field.
                        position - 1
                    } else {
                        if (start > 0) {
                            // Adding symbol to the end of the field.
                            start - 1
                        } else {
                            // Text paste in the empty field.
                            0
                        }
                    }
                }
                setSelection(position)
            }
        }
    }
}

// Usage:
editTextWatcher = EditTextWatcher(view.edit_text)
view.edit_text.addTextChangedListener(editTextWatcher)

0

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

android:maxLength="@{length}"

প্রোগ্রামেটিকভাবে সেট করার জন্য আপনি নিম্নলিখিত ফাংশনটি ব্যবহার করতে পারেন

public static void setMaxLengthOfEditText(EditText editText, int length) {
    InputFilter[] filters = editText.getFilters();
    List arrayList = new ArrayList();
    int i2 = 0;
    if (filters != null && filters.length > 0) {
        int length = filters.length;
        int i3 = 0;
        while (i2 < length) {
            Object obj = filters[i2];
            if (obj instanceof LengthFilter) {
                arrayList.add(new LengthFilter(length));
                i3 = 1;
            } else {
                arrayList.add(obj);
            }
            i2++;
        }
        i2 = i3;
    }
    if (i2 == 0) {
        arrayList.add(new LengthFilter(length));
    }
    if (!arrayList.isEmpty()) {
        editText.setFilters((InputFilter[]) arrayList.toArray(new InputFilter[arrayList.size()]));
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.