কম্পিউটার টিউটোরিয়াল

Android-এ EditText-এ টেক্সট দৈর্ঘ্য সীমাবদ্ধ করার পদ্ধতি

EditText-এ Max Length সেট করা (XML + Programmatic)

Android-এ EditText-এ ক্যারেক্টার লিমিট সেট করার সবচেয়ে সহজ উপায় হল XML-এ android:maxLength অ্যাট্রিবিউট ব্যবহার করা। প্রোগ্রাম্যাটিক্যালি করার জন্য InputFilter.LengthFilter ব্যবহার করুন।

পদ্ধতি ১: XML-এ maxLength (সর্বোত্তম ও সিম্পল)

<EditText
    android:id="@+id/etLimited"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="সর্বোচ্চ ১০ ক্যারেক্টার"
    android:maxLength="10"
    android:inputType="text" />

এই এক লাইনই যথেষ্ট। ব্যবহারকারী ১০ ক্যারেক্টার টাইপ করলে আরও টাইপ করতে পারবে না।

পদ্ধতি ২: প্রোগ্রাম্যাটিক্যালি (InputFilter.LengthFilter)

EditText editText = findViewById(R.id.etLimited);
int maxLength = 10;
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)});

পদ্ধতি ৩: একাধিক ফিল্টার কম্বাইন করা

যদি ইতিমধ্যে অন্য ফিল্টার থাকে (যেমন maxLength + custom validation):

InputFilter[] existingFilters = editText.getFilters();
InputFilter[] newFilters = Arrays.copyOf(existingFilters, existingFilters.length + 1);
newFilters[newFilters.length - 1] = new InputFilter.LengthFilter(10);
editText.setFilters(newFilters);

সম্পূর্ণ উদাহরণ: MainActivity.java

package com.example.edittextmaxlength;

import android.os.Bundle;
import android.text.InputFilter;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EditText etXmlLimit = findViewById(R.id.etXmlLimit);
        EditText etProgrammaticLimit = findViewById(R.id.etProgrammaticLimit);
        EditText etCombined = findViewById(R.id.etCombined);

        // পদ্ধতি ২: প্রোগ্রাম্যাটিক্যালি ১৫ ক্যারেক্টার লিমিট
        etProgrammaticLimit.setFilters(new InputFilter[]{new InputFilter.LengthFilter(15)});

        // পদ্ধতি ৩: কম্বাইনড ফিল্টার (লিমিট + কাস্টম ভ্যালিডেশন)
        InputFilter[] baseFilters = etCombined.getFilters();
        InputFilter[] combinedFilters = new InputFilter[baseFilters.length + 2];
        System.arraycopy(baseFilters, 0, combinedFilters, 0, baseFilters.length);
        combinedFilters[baseFilters.length] = new InputFilter.LengthFilter(20);
        combinedFilters[baseFilters.length + 1] = (source, start, end, dest, dstart, dend) -> {
            // কাস্টম ভ্যালিডেশন: শুধু অক্ষর ও সংখ্যা অনুমোদন
            for (int i = start; i < end; i++) {
                char c = source.charAt(i);
                if (!Character.isLetterOrDigit(c) && c != ' ') {
                    return ""; // ব্লক করুন
                }
            }
            return null; // অনুমোদন
        };
        etCombined.setFilters(combinedFilters);

        // লাইভ ক্যারেক্টার কাউন্ট দেখান (ঐচ্ছিক)
        etXmlLimit.addTextChangedListener(new TextWatcher() {
            @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
            @Override public void onTextChanged(CharSequence s, int start, int before, int count) {
                // কাউন্ট আপডেট করতে পারেন
            }
            @Override public void afterTextChanged(Editable s) {}
        });
    }
}

activity_main.xml (সম্পূর্ণ লেআউট)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="EditText Max Length Demo"
        android:textSize="20sp"
        android:textStyle="bold"
        android:layout_marginBottom="24dp"/>

    <!-- পদ্ধতি ১: XML maxLength -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="১. XML maxLength (১০ ক্যারেক্টার)"
        android:textStyle="bold"
        android:layout_marginTop="16dp"/>
    <EditText
        android:id="@+id/etXmlLimit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="সর্বোচ্চ ১০ ক্যারেক্টার"
        android:maxLength="10"
        android:inputType="text" />

    <!-- পদ্ধতি ২: Programmatic LengthFilter -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="২. Programmatic LengthFilter (১৫ ক্যারেক্টার)"
        android:textStyle="bold"
        android:layout_marginTop="16dp"/>
    <EditText
        android:id="@+id/etProgrammaticLimit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="সর্বোচ্চ ১৫ ক্যারেক্টার (কোডে সেট)" />

    <!-- পদ্ধতি ৩: Combined Filters -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="৩. Combined: LengthFilter (২০) + Alphanumeric Only"
        android:textStyle="bold"
        android:layout_marginTop="16dp"/>
    <EditText
        android:id="@+id/etCombined"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="অক্ষর/সংখ্যা, সর্বোচ্চ ২০" />

</LinearLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.edittextmaxlength">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.EditTextMaxLength">

    <activity
        android:name=".MainActivity"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    </application>
</manifest>

InputFilter.LengthFilter-এর আচরণ

  • পেস্ট (Paste) করার সময়ও লিমিট এনফোর্স করে
  • ইমোজি, স্পেশাল ক্যারেক্টার সব গिनाয় (UTF-16 কোড ইউনিট বেসে)
  • সরাসরি setText() কল করলে ফিল্টার বাইপাস হয় (প্রোগ্রাম্যাটিক সেটে লিমিট চেক করতে হয় ম্যানুয়ালি)

উন্নত: ক্যারেক্টার কাউন্ট UI দেখানো

// TextInputLayout-এ counterEnabled ব্যবহার করুন (Material Components)
<com.google.android.material.textfield.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="বায়ো"
    app:counterEnabled="true"
    app:counterMaxLength="160">

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

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

এটি অটোমেটিক্যালি "১৫/১৬০" টাইপ কাউন্টার দেখাবে এবং লিমিট এনফোর্স করবে।

সাধারণ সমস্যা ও সমাধান

সমস্যাসমাধান
maxLength কাজ করে নাInputType="text" বা অন্য সেট আছে কিনা চেক করুন, কিছু inputType konflikt করতে পারে
Paste করলে বেশি চলে যায়LengthFilter পেস্টেও কাজ করে; কাস্টম ফিল্টার থাকলে সেটি চেক করুন
setText() দিয়ে লিমিট বাইপাস হয়setText()-এর আগে length চেক করুন: if (text.length() > max) text = text.substring(0, max);
ইমোজি ২ ক্যারেক্টার গिनाয়সারোগেট পেয়ার (surrogate pairs) — এটি ঠিকই, UTF-16 এ ২ code unit
  1. অ্যান্ড্রয়েডে EditText খালি কিনা চেক করার পদ্ধতি

  2. অ্যান্ড্রয়েডে InputFilter ব্যবহার করে EditText-এ ক্যারেক্টার সীমাবদ্ধ করার পদ্ধতি

  3. Android-এ TextView-এ টেক্সট জাস্টিফাই (Justify) করার পদ্ধতি

  4. CSS3 ব্যবহার করে ইনপুট টেক্সটের দৈর্ঘ্য সীমিত করা