Android TextView में प्रोग्राम को अधिकतम रूप से कैसे सेट करें?


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
उस पर बिल्डिंग, यह जाने के लिए बहुत साफ हो सकता है: tv.setFilters (नया InputFilter [] {नया InputFilter.LengthFilter (10)});
मार्क डी

43
बस "maxLength ()" नहीं कह सकता .. नहीं, नहीं, नहीं .. यह बहुत आसान होगा। उन्हें इसे अमूर्त बनाना था .. याय!
क्रोधितगीत

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
फ़ंक्शन नाम के रूप में सेटमैक्लाट्रिक्स का उपयोग क्यों नहीं किया जाता है? आप इसे
टेक्स्टव्यू पर

मेरे पास इस पद्धति का अनुसरण करने वाली अन्य विधियाँ हैं: limitDecimalPlaces, limitNumberOnly, limitAscii साथ जाने के लिए limitLength।
केविन

1
फ़िल्टर्स = filter.plus (InputFilter.LengthFilter (अधिकतम)) मौजूदा लोगों को अधिलेखित न करें
ersin-ertan

7

जैसा कि जोआओ कार्लोस ने कहा, कोटलिन में:

editText.filters += InputFilter.LengthFilter(10)

यह भी देखें https://stackoverflow.com/a/58372842/2914140कुछ उपकरणों के बारे में अजीब व्यवहार।

( android:inputType="textNoSuggestions"अपने को जोड़ें EditText।)


1
इसकी बग बनाएं यदि आप मेरे मामले में बाद की लंबाई को बदलना चाहते हैं जैसे मैं 10 से 20 तक मैक्सलेंथ को बदलता हूं, लेकिन कोड के रूप में हम फ़िल्टर को इसके अवशेष सेट करते हैं MaxLength 10 bcus अब सरणी में हमारे पास 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
     AlertDialog.Builder builder = new AlertDialog.Builder(this);
                    builder.setTitle("Title");


                    final EditText input = new EditText(this);
                    input.setInputType(InputType.TYPE_CLASS_NUMBER);
//for Limit...                    
input.setFilters(new InputFilter[] {new InputFilter.LengthFilter(3)});
                    builder.setView(input);

0

सबसे अच्छा समाधान मुझे मिला

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

इसकी लंबाई सीमित नहीं होगी EditText, लेकिन 10 वें प्रतीक (एक समय) के बाद एक पाठ को काट दिया जाएगा।
शीतमिंड

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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.