2011-06-29 12 views
10

EditText घटक पर, मैं ENTER कुंजी (फॉर्म सत्यापन के लिए) को पकड़ने के लिए KeyListener सेट करने का प्रयास कर रहा हूं।एंड्रॉइड के संपादन टेक्स्ट के साथ समस्या: KeyListener

text.setKeyListener(new KeyListener() { 

     @Override 
     public boolean onKeyUp(View view, Editable text, int keyCode, KeyEvent event) { 
      return false; 
     } 

     @Override 
     public boolean onKeyOther(View view, Editable text, KeyEvent event) { 
      return false; 
     } 

     @Override 
     public boolean onKeyDown(View view, Editable text, int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_ENTER) { 
       onKeyEnterPressedListener.onKeyEnterPressed(AKText.this); 
       return true; 
      } else { 
       return false; 
      } 
     } 

     @Override 
     public int getInputType() { 
      return 1; 
     } 

     @Override 
     public void clearMetaKeyState(View view, Editable content, int states) { 

     } 
    }); 

समस्या यह है कि जब भी मैं EditText में टाइप कीबोर्ड का उपयोग कर, सभी कुंजियों अनदेखी कर रहे हैं है और यह मेरे कीस्ट्रोक्स अनदेखी कर रहा है। हालांकि, एम्यूलेटर के डिवाइस पर सॉफ्टपैड काम कर रहा है।

कृपया इसे कैसे ठीक करें?

private TextWatcher tw = new TextWatcher() { 
    public void afterTextChanged(Editable s){ 

    } 
    public void beforeTextChanged(CharSequence s, int start, int count, int after){ 
     // you can check for enter key here 
    } 
    public void onTextChanged (CharSequence s, int start, int before,int count) { 
    } 
}; 

EditText et = (EditText) findViewById(R.id.YOUR_EDITTEXT_ID); 
et.addTextChangedListener(tw); 

उत्तर

28

मैं बजाय TextWatcher वर्ग का प्रयोग करेंगे?

http://developer.android.com/reference/android/view/View.html#setOnKeyListener(android.view.View.OnKeyListener)

http://developer.android.com/reference/android/view/View.OnKeyListener.html

editText.setOnKeyListener(new OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     Log.i("KEY", Integer.toString(keyCode)); 
     return false; 
    } 
}); 
+0

महान उत्तर ... ऑनकी श्रोताओं हमेशा काम नहीं करते ... यह काम करता है! धन्यवाद! – Rawr

+0

क्या टेक्स्ट टेक्स्टर कॉल है जब एडिटटेक्स्ट फिर से लोड हो जाता है –

+1

addTextChangedListener ** कुछ मिनटों को बर्बाद कर देता है .. कैप्स सी – Dhina

2

आप) setOnKeyListener उपयोग करने के लिए (आपका मतलब है:

0

इसकी वजह से अपने अपने onkeyup विधि से झूठी लौटने, एंड्रॉयड विशेष रूप से संचालन onkeyup विधि के बाद से नियंत्रित किया जाता है।

इसके अलावा एक KeyListener का उपयोग करने के बजाय, अधिकांश गतिविधियों में एक ऑन-अप विधि है जिसे आप ओवरराइड कर सकते हैं।

यहां मेरे कुछ कोड का नमूना है जो मैं काम कर रहा हूं।

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    if(keyCode == KeyEvent.KEYCODE_TAB) editText1.tab(); 
    if(event.isCtrlPressed()) 
    { 
     if(keyCode == KeyEvent.KEYCODE_O) // ctrl+o 
     { 
      onClick(open); 
     } 
     else if(keyCode == KeyEvent.KEYCODE_N) // ctrl+n 
     { 
      addFileTab(null);     // add untitled tab 
      editText1.setText(""); 
     } 
     else if(keyCode == KeyEvent.KEYCODE_A) // ctrl+a 
     { 
      editText1.selectAll(); 
     } 
     else if(keyCode == KeyEvent.KEYCODE_S) // ctrl+s 
     { 
      onClick(save); 
     } 
     else if(keyCode == KeyEvent.KEYCODE_C) // ctrl+c 
     { 
      String selected = editText1.selection(); 
      ClipData clip; 
      if(current != null) 
       clip = ClipData.newPlainText(current.getName() + " selection", selected); 
      else 
       clip = ClipData.newPlainText("Cerulean selection", selected); 
      clipMan.setPrimaryClip(clip); 
     } 
     else if(keyCode == KeyEvent.KEYCODE_P && clipMan.hasPrimaryClip()) // ctrl+p 
     { 
      if(clipMan.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) 
      { 
       CharSequence clip = clipMan.getPrimaryClip().getItemAt(0).coerceToText(getBaseContext()); 
       editText1.insert(clip.toString()); 
      } 
     } 
     return false; 
    } 
    if(keyCode == KeyEvent.KEYCODE_SPACE || keyCode == KeyEvent.KEYCODE_ENTER) 
    { 
     onTabClicked(current, curTab); 
    } 
    return super.onKeyUp(keyCode, event); 
} 

मैं सुपर क्लास को अन्य सभी चीज़ों के लिए केपअप पर कॉल करता हूं। उम्मीद है कि यह किसी की मदद करता है।

-c

अद्यतन: केवल इस संभाल हार्डवेयर कीबोर्ड, अन्य कार्यों के लिए एक TextWatcher का उपयोग करें।

संबंधित मुद्दे