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


176

আমি প্রোগ্রামগতভাবে এর maxLengthসম্পত্তি সেট করতে চাইTextView বিন্যাসে হার্ড কোড করতে চাই না বলে আমি করতে চাই। আমি setসম্পর্কিত কোনও পদ্ধতি দেখতে পাচ্ছি না maxLength

কেউ কীভাবে এটি অর্জন করতে পারে আমাকে গাইড করতে পারে?

উত্তর:


363

এরকম কিছু হওয়া উচিত। তবে এটি কখনও পাঠ্যদর্শন জন্য ব্যবহার করা হয়নি, কেবল সম্পাদনা পাঠ্য:

TextView tv = new TextView(this);
int maxLength = 10;
InputFilter[] fArray = new InputFilter[1];
fArray[0] = new InputFilter.LengthFilter(maxLength);
tv.setFilters(fArray);

119
তার উপর ভিত্তি করে এটি আরও পরিষ্কার হতে পারে: টিভি.সেটফিল্টার (নতুন ইনপুটফিল্টার [] In নতুন ইনপুটফিল্টার en লেন্থফিল্টার (10););
চিহ্নিত করুন Mark

43
শুধু "ম্যাক্সেলেন্থ ()" বলতে পারিনি .. না, না, না .. এটি খুব সহজ হবে। তাদের এটি বিমূর্ত করতে হয়েছিল .. হ্যাঁ!
রাগ করুন gu:

3
তবে এটি আপনার আগের ফিল্টারগুলি পুনরায় সেট করবে, না?
crgarridos

19
কোটলিনের সাহায্যে আপনি এটিকে ক্লিনার করতে পারেন: editText.filters = arrayOf (InputFilter.LengthFilter (10))
এলভিস চিদেরা

5
editText.filters = arrayOf(*editText.filters, InputFilter.LengthFilter(10))কোটলিনের সাথে পুরানো ফিল্টারগুলি রাখুন
পিটার

85

এটা চেষ্টা কর

int maxLengthofEditText = 4;    
editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(maxLengthofEditText)});

1
এটি আমার পক্ষে কাজ করে তবে অ্যান্ড্রয়েড 5.1 এ আপনি এখনও অক্ষরগুলি টাইপ করতে চালিয়ে যেতে পারেন, ইনপুটফিল্ডে এটি হ'ল "অদৃশ্য"। তবে সেগুলি পাঠ্য প্রস্তাবনায় দেখানো হয়েছে। এবং আপনি যখন চিঠিগুলি শেষ করার চেষ্টা করবেন তখন।
Radon8472

11
এটি "অন্য উপায়" নয় এটি প্রথম উত্তরটির একই সংক্ষেপে সংক্ষিপ্ত সংস্করণ।
নিনজা কোডিং

21

সহজ উপায় সীমা পাঠ্য অক্ষর সম্পাদনা করুন :

EditText ed=(EditText)findViewById(R.id.edittxt);
ed.setFilters(new InputFilter[]{new InputFilter.LengthFilter(15)});

16

আপনারা যারা কোটলিন ব্যবহার করছেন তাদের জন্য

fun EditText.limitLength(maxLength: Int) {
    filters = arrayOf(InputFilter.LengthFilter(maxLength))
}

তারপরে আপনি কেবল একটি সাধারণ editText.limitLength (10) ব্যবহার করতে পারেন


1
কেন ফাংশন নাম হিসাবে setMaxLength ব্যবহার করবেন না? আপনি এটি টেক্সটভিউতেও প্রয়োগ করতে পারেন ... ধন্যবাদ +1 :)
ক্রগারিডোস

আমার অন্যান্য পদ্ধতি রয়েছে যা এই প্যাটার্নটি অনুসরণ করে: সীমাবদ্ধতার সাথে চলার জন্য সীমাবদ্ধ ডেসিমাল প্লেসেস, সীমা সংখ্যাফল মাত্র, সীমা অ্যাসসিআই s
কেভিন

1
ফিল্টার = ফিল্টার.প্লাস (ইনপুটফিল্টার.লেন্থফিল্টার (সর্বাধিক)) বিদ্যমানগুলি ওভাররাইট করবেন না
ersin-ertan

7

জোও কার্লোস যেমন বলেছিলেন, কোটলিনে এটি ব্যবহার করুন:

editText.filters += InputFilter.LengthFilter(10)

Https://stackoverflow.com/a/58372842/2914140 এও দেখুনকিছু ডিভাইসগুলির অদ্ভুত আচরণ সম্পর্কে ।

( android:inputType="textNoSuggestions"আপনার EditText। যোগ করুন )


1
আপনি যদি দৈর্ঘ্যের উত্তর পরিবর্তন করতে চান তবে এটির জন্য বাগটি তৈরি করুন আমার ক্ষেত্রে আমি ম্যাক্সেলেন্থটি 10 ​​থেকে 20 থেকে পরিবর্তন করি তবে কোড হিসাবে আমরা ফিল্টারটি যুক্ত করি এটির ম্যাক্সেলেন্থ 10 বিসিএস সেট এখন অ্যারেতে আমাদের রয়েছে 10,20 দুটি সর্বোচ্চ দৈর্ঘ্য।
নিখিল

@ নিখিল, আপনার সাথে একমত, ধন্যবাদ! হ্যাঁ, এই ক্ষেত্রে আমাদের প্রথমে একটি ফিল্টার ( LengthFilter(10)) মুছে ফেলা উচিত এবং তারপরে অন্য একটি ( LengthFilter(20)) যুক্ত করা উচিত।
কুলমাইন্ড

6

কোটলিনের জন্য এবং পূর্ববর্তী ফিল্টারগুলি পুনরায় সেট না করে:

fun TextView.addFilter(filter: InputFilter) {
  filters = if (filters.isNullOrEmpty()) {
    arrayOf(filter)
  } else {
    filters.toMutableList()
      .apply {
        removeAll { it.javaClass == filter.javaClass }
        add(filter)
      }
      .toTypedArray()
  }
}

textView.addFilter(InputFilter.LengthFilter(10))

1

আমি এটির জন্য একটি সাধারণ এক্সটেনশন ফাংশন করেছি

/**
 * maxLength extension function makes a filter that 
 * will constrain edits not to make the length of the text
 * greater than the specified length.
 * 
 * @param max
 */
fun EditText.maxLength(max: Int){
    this.filters = arrayOf<InputFilter>(InputFilter.LengthFilter(max))
}

editText?.maxLength(10)


0

সেরা সমাধান আমি খুঁজে পেয়েছি

textView.setText(text.substring(0,10));

এটি একটি দৈর্ঘ্য সীমাবদ্ধ করবে না EditText, তবে দশম প্রতীক (এক সময়) পরে কোনও পাঠ্য কেটে দেবে।
কুলমাইন্ড

0

আসল ইনপুট ফিল্টারটি রাখতে, আপনি এটি এইভাবে করতে পারেন:

InputFilter.LengthFilter maxLengthFilter = new InputFilter.LengthFilter(100);
        InputFilter[] origin = contentEt.getFilters();
        InputFilter[] newFilters;
        if (origin != null && origin.length > 0) {
            newFilters = new InputFilter[origin.length + 1];
            System.arraycopy(origin, 0, newFilters, 0, origin.length);
            newFilters[origin.length] = maxLengthFilter;
        } else {
            newFilters = new InputFilter[]{maxLengthFilter};
        }
        contentEt.setFilters(newFilters);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.