onKeyListener를 사용하여 onKey 이벤트를 가져옵니다. 그것은 정상적인 키보드로 잘 작동합니다. 하지만 소프트 키보드에서는 작동하지 않습니다. 난 숫자가 아니라 알파벳에 대한 onKey 이벤트를 얻을 수 있습니다. 이 문제를 해결할 수있는 해결 방법이 있습니까? 어떤 종류의 도움이라도 대단히 감사하겠습니다.onKeyListener가 소프트 키보드와 작동하지 않습니다 (Android)
답변
소프트웨어 키보드로 OnKeyListener가 전혀 호출되지 않는다고 생각합니다. IME 장치 인 소프트웨어 키보드와 키보드 이외의 IME 장치와 관련이 있습니다. onKeyListener는 하드웨어 키보드가있는 전화기에서만 작동하기 때문에 꽤 쓸모가없는 것처럼 보입니다. 최근에 OnKeyListener를 사용하는 대신 내 Activity의 EditText 필드에 TextWatcher을 사용하여이 문제를 해결했습니다.
TextWatcher를 사용했지만 각 키를 눌렀을 때 KeyUp 및 KeyDown 이벤트가 필요했습니다. Textwatcher는 나에게 keydown 이벤트를 제공합니다. –
소프트웨어 키보드에서 KeyUp 및 KeyDown을들을 수 있다고 생각하지 않습니다. –
onKeyListener는 안드로이드 1.6에서
는 이후 문자와 숫자 키를 onKey 이벤트를 통해하지 않을 소프트 키보드를 통해 안드로이드 1.5에서 완벽하게 작동, 아직 DEL 키를
좌절
이 작업을 수행 장치에 특정 된 것 같습니다. 나는 이것이 Xoom과 Acer A100에서 작동한다는 것을 확인할 수 있습니다. 그러나 Samsung Galaxy Tab Plus는 문자가 아닌 버튼에 대해서만 이벤트를 실행합니다. (Honeycomb을 실행하는 모든 장치)
나는 청취자를 자신의 방법으로두고 처음으로 다시 호출하여이 문제를 해결했습니다. onCreate에서 나는 setKeyListenerForEnter()를 호출한다.
그런 다음, 여기에 방법이다 :이이 IME 키보드 자체를 처리하는 것보다 더 나은 솔루션이 있는지 확실하지 않습니다
공공 무효 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;
}
});
}
하지만 솔루션입니다 .
어쩌면 어리석은 일일 수도 있지만, 지금은 Android가 작동하는 방식입니다.
설명서에는 소프트웨어가 아닌 하드웨어 키 스트로크에 대해서만 키 이벤트가 전파된다고 나와 있습니다.
장치 제조업체는 실제 제품을 존중하거나 동등한 조건으로 소프트 키보드와 하드 키보드를 실제로 처리하기는하지만 제조사에게 완전히 의존하지만 키 수신기를 통해 소프트 키보드 이벤트를 전달하는 것을 실제로 권장하지 않습니다.
안드로이드 4.2.2부터 안드로이드 시스템 자체는 소프트 키보드의 키 스트로크 이벤트를 지원하지 않으므로 제조업체조차도 자신의 방식을 선택할 수 없습니다.
유일한 실수 방지 옵션은 사용자의 IME (소프트 키보드)를 구현하고 키 입력을 직접 처리하는 것입니다.
TextWatcher는 대부분 키 수신기를 대체하는 데 사용할 수 있지만 editText.setText (...); 또한 TextWatcher 이벤트를 트리거하므로, 입력 된 키에만 관심이 있다면 아마도 TextWatcher도 해결책이 될 수 없습니다.
TextWatcher를 AutocomleteTextView 또는 EditText와 함께 사용할 때는주의하십시오. TextWatcher 이벤트 내에서 AutocompleteTextView/EditText 컨텐트의 텍스트를 수정하지 마십시오. 그렇지 않으면 무한 이벤트/수신 루프로 끝날 것입니다.
희망 사항은 사용 가능한 옵션을 명확히하는 데 도움이 되겠지만 슬프게도 작동하는 솔루션을 제공하지 않습니다.
Google이 UI의 중요한 측면에서 실망했다고 실망스럽게 생각합니다.
setFocusableInTouchMode(true); //Enable soft keyboard on touch for target view
setFocusable(true); //Enable hard keyboard to target view
예 : 소프트 키보드에서 일부 문자가 아닌 다른 사람을 얻고있는 경우
public class CanvasView extends View{
public CanvasView(Context c){
super(c);
//enable keyboard
setOnKeyListener(new KeyBoard());
setFocusable(true);
setFocusableInTouchMode(true);
}
}
이 코드를 사용하는 방법에 대한 예제를 제공해 주시겠습니까? 나는 지금 그것을 시도하고 그것은 작동하지 않는 것. – Simon
공용 클래스 CanvasView보기를 확장 { \t \t 공공 CanvasView (컨텍스트 C) { \t \t 슈퍼 (C); \t \t \t \t // 키보드 수 \t \t setOnKeyListener (새 키보드()); \t \t setFocusable (true); \t \t setFocusableInTouchMode (true); \t}} // 키보드를 canvasView로 설정합니다. – user3309567
- 1. OnKeyListener가 작동하지 않습니다.
- 2. 소프트 키보드와 함께 GridView를 사용할 때의 문제
- 3. Android 알림이 작동하지 않습니다.
- 4. Android 스레드가 작동하지 않습니다.
- 5. Android : alertDialog가 작동하지 않습니다.
- 6. 소프트 키보드 가시성 변경시 Android가 작동하지 않음
- 7. Android Webkit의 읽기 전용 입력이 작동하지 않습니다.
- 8. Android 소프트 키 이벤트 캡처
- 9. 소프트 키보드가 나타나지 않습니다.
- 10. Android webview가 작동하지 않습니다. 도와주세요
- 11. Android BOOT_COMPLETED이 (가) 작동하지 않습니다!
- 12. android : layout_gravity가 예상대로 작동하지 않습니다.
- 13. Android 이미지 캡처가 작동하지 않습니다.
- 14. Android TranslationAnimation이 올바르게 작동하지 않습니다.
- 15. Android GPS Manifest가 작동하지 않습니다.
- 16. android 인터넷 권한이 작동하지 않습니다.
- 17. Android SQLite 쿼리가 작동하지 않습니다.
- 18. Android SharedPreferences 백업이 작동하지 않습니다.
- 19. Android ArrayAdapter.Add 메소드가 작동하지 않습니다.
- 20. android 에뮬레이터가 제대로 작동하지 않습니다.
- 21. android 왜 RelativeLayout이 작동하지 않습니다
- 22. Android Java newline이 작동하지 않습니다.
- 23. Android LogCat이 에뮬레이터에서 작동하지 않습니다.
- 24. Android 앱이 에뮬레이터에서 작동하지 않습니다.
- 25. Android : Layout.addView()가 작동하지 않습니다.
- 26. Android 메뉴 옵션이 작동하지 않습니다.
- 27. Android :: MediaPalyer.seekTo() 메서드가 작동하지 않습니다.
- 28. Android SimpleCursorAdapter + ListView가 작동하지 않습니다.
- 29. android remoteView layout이 작동하지 않습니다
- 30. Android SDK의 overridePendingTransition이 작동하지 않습니다.
그것은 이상한 소리가 난다. 청취자의 코드를 어디에 게시 할 수 있습니까? –
public void onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.login_screen); emailTxt = (EditText) findViewById (R.id.email); emailTxt.setOnKeyListener (새 OnKeyListener() \t { \t \t 공공 부울 onKey (보기 V, INT 키 코드, KeyEvent를 이벤트) \t \t { \t \t \t Log.i ("키 값", 문자열. valueOf (keyCode)); \t \t}); } –
지금은 키를 읽는 중입니다. –