Tôi đang sử dụng onKeyListener để nhận các sự kiện onKey. Nó hoạt động tốt với bàn phím thông thường. Nhưng nó không hoạt động với bàn phím mềm. Tôi chỉ có thể nhận các sự kiện onKey cho số học chứ không phải bảng chữ cái. Có giải pháp nào để giải quyết vấn đề này không? Bất kỳ loại trợ giúp nào cũng sẽ được đánh giá cao.onKeyListener không hoạt động với bàn phím mềm (Android)
Trả lời
Tôi không tin rằng OnKeyListener được gọi một cách hoàn toàn bằng bàn phím phần mềm. Nó có một cái gì đó để làm với bàn phím phần mềm là một thiết bị IME và các thiết bị IME có thể là những thứ khác ngoài bàn phím. Nó dường như làm cho onKeyListener khá nhiều vô dụng mặc dù, vì nó chỉ hoạt động trên điện thoại với bàn phím phần cứng. Gần đây tôi đã khắc phục vấn đề này bằng cách sử dụng TextWatcher trên trường EditText trong Hoạt động của tôi thay vì sử dụng OnKeyListener.
Tôi đã thử sử dụng TextWatcher nhưng tôi cần các sự kiện KeyUp và KeyDown cho mỗi phím được nhấn. Textwatcher chỉ mang lại cho tôi sự kiện keydown. –
Tôi không nghĩ rằng có thể nghe KeyUp và KeyDown từ bàn phím phần mềm. –
onKeyListener làm việc một cách hoàn hảo trên Android 1.5 thông qua bàn phím mềm
Từ Android 1.6 trở đi các phím ký tự và số sẽ không thông qua sự kiện onKey, nhưng phím DEL làm
Bực bội
này dường như là thiết bị cụ thể. Tôi có thể xác nhận rằng nó hoạt động trên Xoom và Acer A100. Tuy nhiên, Samsung Galaxy Tab Plus chỉ kích hoạt sự kiện cho các nút không phải nhân vật. (Tất cả các thiết bị chạy Honeycomb)
Tôi nhận được điều này bằng cách đặt người nghe vào phương pháp riêng của nó và gọi lại lần nữa sau lần đầu tiên. Trong onCreate tôi gọi setKeyListenerForEnter();
Sau đó, đây là phương pháp:
public void setKeyListenerForEnter() {
final EditText search_entry = (EditText) findViewById(R.id.search_entry);
search_entry.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
getSearchResults(v);
setKeyListenerForEnter();
return true;
}
return false;
}
});
}
Tôi không chắc chắn nếu điều này là một giải pháp tốt hơn so với xử lý bàn phím IME chính nó, nhưng nó là một giải pháp .
Điều này có lẽ là ngu ngốc, nhưng đó là cách Android hoạt động vào lúc này.
Tài liệu nêu rõ rằng các sự kiện chính sẽ chỉ được truyền cho các nét chính của phần cứng chứ không phải phần mềm.
Các nhà sản xuất thiết bị thực sự không được khuyến khích tuyên truyền các sự kiện bàn phím mềm thông qua người nghe chính, mặc dù hoàn toàn phụ thuộc vào nhà sản xuất để tôn trọng hoặc thực sự xử lý bàn phím mềm và cứng với điều kiện như nhau.
Bắt đầu từ Android 4.2.2, bản thân hệ thống Android sẽ không hỗ trợ các sự kiện nhấn phím cho bàn phím mềm, vì vậy ngay cả các nhà sản xuất cũng sẽ không thể lựa chọn.
Vì vậy, tùy chọn đơn giản chỉ có thể thực hiện IME của riêng bạn (bàn phím mềm) và tự xử lý các thao tác gõ phím.
Trình soạn thảo văn bản có thể được sử dụng chủ yếu để thay thế trình nghe chính, tuy nhiên editText.setText (...); cũng sẽ kích hoạt các sự kiện TextWatcher, vì vậy nếu một trong những quan tâm đến các phím gõ chỉ sau đó có lẽ TextWatcher không phải là một giải pháp, hoặc.
Hãy thận trọng khi sử dụng TextWatcher với AutocomleteTextView hoặc EditText. Không sửa đổi văn bản trong nội dung của AutocompleteTextView/EditText từ bên trong các sự kiện TextWatcher, nếu không bạn có thể sẽ kết thúc trong một vòng lặp sự kiện/nghe vô hạn.
Hy vọng điều này sẽ giúp làm rõ các tùy chọn có sẵn, nhưng thật đáng tiếc là nó không cung cấp giải pháp làm việc.
Thất vọng rằng Google đã bỏ lỡ khía cạnh quan trọng này của giao diện người dùng của họ.
setFocusableInTouchMode(true); //Enable soft keyboard on touch for target view
setFocusable(true); //Enable hard keyboard to target view
dụ:
public class CanvasView extends View{
public CanvasView(Context c){
super(c);
//enable keyboard
setOnKeyListener(new KeyBoard());
setFocusable(true);
setFocusableInTouchMode(true);
}
}
Bạn có thể cho chúng tôi ví dụ về cách người ta có thể sử dụng mã này không? Tôi đã thử nó bây giờ và nó dường như không hoạt động. – Simon
public class CanvasView kéo dài Xem { \t \t CanvasView công cộng (Context c) { \t \t siêu (c); \t \t \t \t // cho phép bàn phím \t \t setOnKeyListener (bàn phím mới()); \t \t setFocusable (true); \t \t setFocusableInTouchMode (true); \t}} // bật bàn phím để canvasView – user3309567
- 1. Bàn phím mềm Android không hoạt động
- 2. onKeyListener không hoạt động trên bàn phím ảo
- 3. Ẩn bàn phím mềm không hoạt động
- 4. Cách ẩn Bàn phím mềm khi hoạt động bắt đầu
- 5. Android bàn phím mềm không panning xem web
- 6. Làm thế nào để giữ bàn phím mềm mở khi khởi động hoạt động trong Android?
- 7. Android - Nhận bấm phím trên bàn phím
- 8. Tắt Android Nhập phím bằng bàn phím mềm
- 9. Buộc Bàn phím mềm mở
- 10. Ẩn bàn phím mềm trên phím tắt được thực hiện trong Android?
- 11. Mở bàn phím mềm khi nhấn phím
- 12. AlertDialog với EditText, mở bàn phím mềm tự động với tiêu điểm trên EditText không hoạt động
- 13. Làm thế nào để bàn phím mềm Android không phản hồi với EditText?
- 14. Cách đóng Hoạt động với bàn phím phần mềm sau khi nhấn BACK?
- 15. Chồng chéo bàn phím mềm với trường EditText
- 16. Ẩn bàn phím ảo hoạt động mà không cần bất kỳ thao tác bàn phím
- 17. Làm thế nào để thay đổi màu nền của bàn phím cho bàn phím mềm Android?
- 18. Ngăn không cho bàn phím mềm bị loại
- 19. Không muốn bàn phím mềm tự động hiển thị khi khởi chạy - Android
- 20. Ngăn các nút từ ẩn bàn phím mềm trên Android
- 21. Sụp đổ khi đóng bàn phím mềm khi đang sử dụng hoạt động gốc
- 22. Android - buộc toàn màn hình bàn phím mềm
- 23. Bàn phím mềm Android tùy chỉnh "Xong" nút văn bản?
- 24. cuộn lên đến bàn phím mềm
- 25. Có thể bật cả Bàn phím thực và Bàn phím mềm cùng một lúc không?
- 26. Tại sao bàn phím ảo không hoạt động?
- 27. Chỉ cần số bàn phím mềm?
- 28. Bàn phím mềm nhập phím điều khiển sự kiện quan trọng
- 29. Bàn phím Android mềm: Nút tiếp theo không "tabbing" giữa các đầu vào số HTML5
- 30. Nhận Bàn phím Vị trí Con trỏ Bàn phím Android
Nghe có vẻ kỳ quặc nếu bạn đang nhận được một số nhân vật nhưng không phải người khác từ bàn phím mềm. Bạn có thể đăng mã của người nghe của mình và nơi bạn đính kèm nó không? –
void công cộng onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.login_screen); emailTxt = (EditText) findViewById (R.id.email); emailTxt.setOnKeyListener (OnKeyListener mới() \t { \t \t public boolean onKey (Xem v, int keyCode, KeyEvent sự kiện) \t \t { \t \t \t Log.i ("Key Value", String. valueOf (mã khóa)); \t \t}); } –
Tôi chỉ đọc các phím cho bây giờ. –