2012-10-14 25 views
9

Tôi đang làm việc trên Android. Trước đây tôi đã sử dụng onKeyListener để xử lý tác vụ cụ thể trên sự kiện quan trọng.Cách xử lý Nhập khóa bằng cách sử dụng TextWatcher trên Android

Tuy nhiên, cách này dường như không giải quyết được sự cố của tôi vì hầu như tất cả khóa sẽ bị vô hiệu hóa khi tôi đã triển khai trình xử lý đó cho số EditText của mình. Sau khi đọc một số chủ đề trong SO, tôi biết rằng tôi nên sử dụng TextWatcher thay vào đó, nhưng tôi vẫn tự hỏi làm thế nào để xử lý sự kiện quan trọng ENTER bên trong vì các tham số được cung cấp chỉ có CharSequence, Editable, v.v. Tôi không tìm thấy bất kỳ thông số keyCode nào.

+0

'Tuy nhiên, cách này dường như không giải quyết được sự cố của tôi vì hầu như tất cả khóa sẽ bị vô hiệu hóa khi tôi đã triển khai trình xử lý đó cho EditText.'..seams giống như mã của bạn không chính xác. Nó sẽ hoạt động. với 'text watcher' bạn không thể nhận' Enter event' –

+1

tại sao câu hỏi của tôi bị bỏ phiếu? – mrkhv

Trả lời

7

thử này

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

Theo tài liệu: _Called khi khóa phần cứng được gửi đến chế độ xem._ – Divers

+2

Khi Thợ lặn cho biết, KeyListener thực sự lắng nghe các phím phần cứng (âm lượng, nhà riêng, v.v.). – Waclock

14

thử này

@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

user2348959 cảm ơn cho giải pháp siêu câu trả lời –

+0

@ user2348959 phương pháp đó không phù hợp với mục đích. Nếu bạn di chuyển lên một dòng với không gian trở lại này cũng được gọi. –

+0

@ user2348959 nó hoạt động nếu dòng mới xuất hiện ở cuối chuỗi .. nhưng nó không làm việc dòng mới xuất hiện ở giữa chuỗi – Pallavi

0

Tôi nghĩ rằng đây là giải pháp tốt hơn, bởi vì bạn có thể nhấn 'Enter' ở bất cứ nơi nào trong lĩnh vực EditText của bạn và không chỉ ở cuối của dòng.

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()); 
      } 
     } 
    }); 
Các vấn đề liên quan