2012-10-14 27 views
9

मैं एंड्रॉइड पर काम कर रहा हूं। पहले मैंने महत्वपूर्ण घटना पर विशिष्ट कार्रवाई को संभालने के लिए onKeyListener का उपयोग किया था।Android पर टेक्स्टवॉचर का उपयोग करके एंटर कुंजी को कैसे संभालें

हालांकि, इस तरह से मेरी समस्या का समाधान नहीं होता है क्योंकि एक बार जब मैंने श्रोता को EditText पर लागू किया है तो लगभग सभी कुंजी अक्षम हो जाएंगी। SO में कुछ विषयों को पढ़ने के बाद, मुझे पता है कि मुझे टेक्स्टवॉचर का उपयोग करना चाहिए, लेकिन मैं अभी भी सोच रहा हूं कि ENTER कुंजी ईवेंट को कैसे संभालना है क्योंकि प्रदान किए गए पैरामीटर केवल CharSequence, Editable आदि हैं। मुझे कोई keyCode पैरामीटर नहीं मिला।

+0

'हालांकि, इस तरह से मेरी समस्या का समाधान नहीं होता है क्योंकि एक बार मैंने अपने श्रोता को मेरे संपादन टेक्स्ट में लागू कर दिया है ..... आपके कोड की तरह सही नहीं है। यह काम करना चाहिए। 'टेक्स्ट वॉचर' के साथ आप 'एंटर इवेंट' नहीं प्राप्त कर सकते हैं –

+1

मेरा प्रश्न क्यों मतदान किया जा रहा था? – mrkhv

उत्तर

7

कोशिश इस

protected View.OnKeyListener onEnter = new View.OnKeyListener() { 

    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if ((event.getAction() == KeyEvent.ACTION_DOWN) 
       && (keyCode == KeyEvent.KEYCODE_ENTER)) { 
      //here do what you want 
     } 
     return false; // very important 
    } 
}; 
+3

दस्तावेज़ के अनुसार: _Called जब एक हार्डवेयर कुंजी को देखने के लिए भेजा जाता है ._ – Divers

+2

डाइवर्स ने कहा, KeyListener वास्तव में हार्डवेयर कुंजी (वॉल्यूम, घर इत्यादि) को सुनता है। – Waclock

14

इस

@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) { 
    if (s.length()>0 && s.subSequence(s.length()-1, s.length()).toString().equalsIgnoreCase("\n")) { 
     //enter pressed 
    } 
} 
+0

उपयोगकर्ता 2348959 उत्तर सुपर समाधान –

+0

@ user2348959 के लिए धन्यवाद कि विधि उद्देश्य के लिए उपयुक्त नहीं है। यदि आप पीछे की जगह के साथ एक रेखा को ऊपर ले जाते हैं तो इसे भी बुलाया जाता है। –

+0

@ user2348959 यह काम करता है अगर स्ट्रिंग के अंत में नई पंक्ति दिखाई देती है .. लेकिन यह स्ट्रिंग के बीच नई लाइन नहीं दिख रही है – Pallavi

0

मुझे लगता है कि यह बेहतर समाधान है की कोशिश, क्योंकि आप केवल अंत में अपने EditText क्षेत्र के किसी भी जगह में दबा सकते हैं 'Enter' और नहीं की रेखा।

edittext.addTextChangedListener(new TextWatcher() { 
     public void afterTextChanged(Editable s) { 
     } 

     public void beforeTextChanged(CharSequence s, int st, int ct, 
             int af) { 
     } 

     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      if (s.length() < 1 || start >= s.length() || start < 0) 
       return; 

      // If it was Enter 
      if (s.subSequence(start, start + 1).toString().equalsIgnoreCase("\n")) { 

       // Change text to show without '\n' 
       String s_text = start > 0 ? s.subSequence(0, start).toString() : ""; 
       s_text += start < s.length() ? s.subSequence(start + 1, s.length()).toString() : ""; 
       edittext.setText(s_text); 

       // Move cursor to the end of the line 
       edittext.setSelection(s_text.length()); 
      } 
     } 
    });