2015-01-20 2 views
0

Я пытаюсь получить нажатие клавиши на мягкой клавиатуре, но я не могу этого сделать. В настоящее время я использую следующий кодandroid - получение мягких клавишных клавиш

@Override 
public boolean dispatchKeyEvent(KeyEvent KEvent) 
{ 
int keyaction = KEvent.getAction(); 

if(keyaction == KeyEvent.ACTION_DOWN) 
{ 
    int keycode = KEvent.getKeyCode(); 
    int keyunicode = KEvent.getUnicodeChar(KEvent.getMetaState()); 
    char character = (char) keyunicode; 

    System.out.println("DEBUG MESSAGE KEY=" + character + " KEYCODE=" + keycode); 
} 


return super.dispatchKeyEvent(KEvent); 

}

Броско ключевые события для аппаратной клавиатуры, но не для виртуального одного. Может кто-то помочь мне

+0

http://developer.android. com/reference/android/text/method/KeyListener.html По умолчанию клавиатура программного обеспечения для Android не будет вызывать методы слушателя вообще. – mkrakhin

ответ

2

От Android Official Page

Примечания: При обработке событий клавиатуры с классом KeyEvent и связанными с ними интерфейсами, то следует ожидать, что такие события клавиатуры приходят только с аппаратной клавиатуры. Вы никогда не должны полагаться на получение ключевых событий для любой клавиши по методу мягкого ввода (экранная клавиатура).

Таким образом, вы должны использовать TextWatcher интерфейс для наблюдения символов нажатых на SoftKeyboard, например:

myEditText.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 


     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      // TODO Auto-generated method stub 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

      // TODO Auto-generated method stub 
     } 
    }); 
+1

Это было полезное решение, удар. –

0

Это должна быть вашим решением:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 

    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 1) { 
     finish(); 
     return true; 
    } 

    return super.onKeyDown(keyCode, event); 
} 
Смежные вопросы