एडिटटेक्स्ट चेंजेड श्रोता में गिनती के चार्ट


272

अपने प्रोजेक्ट में मैंने ए EditText। मैं पात्रों को गिनना चाहता हूं EditText, और उस संख्या को एक में दिखाता हूं TextView। मैंने निम्नलिखित कोड लिखा है और यह ठीक काम करता है। हालाँकि, मेरी समस्या यह है कि जब मैं Backspaceइसे क्लिक करता हूं तो इसकी गणना की जाती है, लेकिन मुझे संख्या को घटाना होगा। मैं कैसे विचार कर सकता हूं Backspace?

tv = (TextView)findViewById(R.id.charCounts);
textMessage = (EditText)findViewById(R.id.textMessage);
textMessage.addTextChangedListener(new TextWatcher(){
    public void afterTextChanged(Editable s) {
        i++;
        tv.setText(String.valueOf(i) + " / " + String.valueOf(charCounts));
    }
    public void beforeTextChanged(CharSequence s, int start, int count, int after){}
    public void onTextChanged(CharSequence s, int start, int before, int count){}
}); 

36
कृपया अप्रासंगिकता को क्षमा करें लेकिन मैं उत्सुक हूं कि आपने अपने प्रश्न प्रारूपण में "बैकस्पेस" कैसे रखा? मैंने ऐसे ही सवाल पूछे हैं, जहां वह तकनीक बहुत उपयोगी रही होगी।
एलेओओप

59
अपना शब्द (इस स्थिति में बैकस्पेस) को <kbd> </ kbd> टैग के बीच रखें जैसे: <kbd> बैकस्पेस </ kbd>
हेसम

2
जब भी आप दिलचस्प प्रारूपण (जैसे "बैकस्पेस") देखते हैं, तो आप हमेशा यह देख सकते हैं कि लेखक ने यह कैसे किया, यह देखने के लिए "संपादित करें" लिंक पर क्लिक करें। फिर अपना संपादन रद्द करने के लिए बस "रद्द करें" पर क्लिक करें।
सुरगाच ० Sur

जवाबों:


142

उपयोग

s.length()

निम्नलिखित में से किसी एक उत्तर में एक बार सुझाव दिया गया था, लेकिन यह बहुत ही अक्षम था

textMessage.getText().toString().length()

38

कैसे के बारे में सिर्फ अपने EditText में चार की लंबाई हो रही है और इसे प्रदर्शित करते हैं?

की लाइन के साथ कुछ

tv.setText(s.length() + " / " + String.valueOf(charCounts));

6
यह उससे भी आसान है - आप सिर्फ कॉल कर सकते हैं textMessage.length(), करने की आवश्यकता नहीं है getText().toString()डेवलपर
.android.com/reference

28

आपके कोड में बहुत कम परिवर्तन:

TextView tv = (TextView)findViewById(R.id.charCounts);
textMessage = (EditText)findViewById(R.id.textMessage);
textMessage.addTextChangedListener(new TextWatcher(){
    public void afterTextChanged(Editable s) {
        tv.setText(String.valueOf(s.toString().length()));
    }
    public void beforeTextChanged(CharSequence s, int start, int count, int after){}
    public void onTextChanged(CharSequence s, int start, int before, int count){}
}); 

1
यह लिखित रूप में काम नहीं करेगा - लंबाई () एक इंट रिटर्न देता है और सेटटेक्स्ट एक स्ट्रिंग की उम्मीद करता है
मार्टिन लॉकेट

1
@MartinLockett स्ट्रिंग को इंट में बदलने के लिए Integer.toString (int_type) का उपयोग करें।
मेहदी रुस्तमी

6

यह भविष्य के दर्शकों के लिए अधिक स्पष्टीकरण के साथ थोड़ा अधिक सामान्य उत्तर है।

एक पाठ श्रोता जोड़ें

यदि आप पाठ की लंबाई खोजना चाहते हैं या पाठ को बदलने के बाद कुछ और करना चाहते हैं, तो आप अपने संपादित पाठ में एक पाठ परिवर्तित श्रोता जोड़ सकते हैं।

EditText editText = (EditText) findViewById(R.id.testEditText);
editText.addTextChangedListener(new TextWatcher() {

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

    }

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

    }

    @Override
    public void afterTextChanged(Editable editable) {

    }
});

श्रोता एक की जरूरत है TextWatcher, जो तीन तरीकों ओवरराइड करने के लिए की आवश्यकता है: beforeTextChanged, onTextChanged, और afterTextChanged

वर्णों की गिनती

आप चरित्र की गिनती में onTextChangedया उसके beforeTextChangedसाथ प्राप्त कर सकते हैं

charSequence.length()

या afterTextChangedसाथ में

editable.length()

विधियों का अर्थ

पैरामीटर थोड़ा भ्रमित कर रहे हैं इसलिए यहां थोड़ा अतिरिक्त स्पष्टीकरण है।

beforeTextChanged

beforeTextChanged(CharSequence charSequence, int start, int count, int after)

  • charSequence: लंबित परिवर्तन किए जाने से पहले यह पाठ सामग्री है। आपको इसे बदलने की कोशिश नहीं करनी चाहिए।
  • start: यह वह इंडेक्स है जहां नया टेक्स्ट डाला जाएगा। यदि किसी श्रेणी का चयन किया जाता है, तो यह सीमा का आरंभिक सूचकांक है।
  • count: यह चयनित पाठ की लंबाई है जो प्रतिस्थापित होने वाली है। अगर कुछ नहीं चुना गया तो countहोगा 0
  • after: यह सम्मिलित किए जाने वाले पाठ की लंबाई है।

onTextChanged

onTextChanged(CharSequence charSequence, int start, int before, int count)

  • charSequence: परिवर्तन के बाद यह पाठ सामग्री है। आपको यहां इस मान को संशोधित करने का प्रयास नहीं करना चाहिए। संशोधित editableमें afterTextChangedअगर आप की जरूरत है।
  • start: यह उस शुरुआत का सूचकांक है जहां नया पाठ डाला गया था।
  • before: यह पुराना मूल्य है। यह पहले से चयनित पाठ की लंबाई है जिसे बदल दिया गया था। यह रूप में एक ही मूल्य है countमें beforeTextChanged
  • count: यह पाठ की लंबाई है जिसे सम्मिलित किया गया था। यह रूप में एक ही मूल्य है afterमें beforeTextChanged

afterTextChanged

afterTextChanged(Editable editable)

जैसे onTextChanged, यह परिवर्तन पहले से ही किए जाने के बाद कहा जाता है। हालाँकि, अब पाठ को संशोधित किया जा सकता है।

  • editable: यह का संपादन योग्य पाठ है EditText। यदि आप इसे बदलते हैं, हालांकि, आपको अनंत लूप में नहीं आने के लिए सावधान रहना होगा। देखें प्रलेखन अधिक जानकारी के लिए।

इस उत्तर से पूरक छवि

यहां छवि विवरण दर्ज करें


0

TextWatcher maritalStatusTextWatcher = new TextWatcher () {@Override public void beforeTextChanged (CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        try {
            if (charSequence.length()==0){
                topMaritalStatus.setVisibility(View.GONE);
            }else{
                topMaritalStatus.setVisibility(View.VISIBLE);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    @Override
    public void afterTextChanged(Editable editable) {

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