2016-05-15 8 views
1

Я пытаюсь прослушивать определенные ключевые события в android, я подключил прослушиватель событий к редактированию текста. Я ищу пробел-прессу, фунт и @ key.for почему-то это событие запускается только для пробела и цифровых клавиш. Функция даже не может быть выполнена для любого другого ключа .... я хотел бы знать, почему? это то, что я делаю неправильно?Android KeyEvent Не регистрируется

package com.stv.mynotes; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.util.Log; 
import android.view.KeyEvent; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.Toast; 

import java.util.StringTokenizer; 

public class TestActivity extends AppCompatActivity implements View.OnKeyListener 
{ 

    EditText edit_txt; 

    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_test); 
     edit_txt = (EditText) (findViewById(R.id.test_txt)); 
     edit_txt.setOnKeyListener(this); 
    } 
    public boolean onKey(View v,int keyCode,KeyEvent event) 
    { 
     int tmpCode = event.getKeyCode(); 
     if (event.getAction() == KeyEvent.ACTION_DOWN) 
     { 
      if (tmpCode == KeyEvent.KEYCODE_SPACE) 
      { 
       Log.i("Test", "Space pressed:"+tmpCode); 
       return true; 
      } 
      if (tmpCode == KeyEvent.KEYCODE_9) 
      { 
       Log.i("Test", "9 pressed:"+tmpCode); 
       return true; 
      } 
      else 
      { 
       Log.i("Test","Unknown Down:"+tmpCode); 
       return false; 
      } 
     } 
     if(event.getAction()==KeyEvent.ACTION_UP) 
     { 
      if (tmpCode == KeyEvent.KEYCODE_POUND) 
      { 
       Log.i("Test", "Pound pressed:"+tmpCode); 
       return true; 
      } 
      if (tmpCode == KeyEvent.KEYCODE_AT) 
      { 
       Log.i("Test", "@ pressed:"+tmpCode); 
       return true; 
      } 
      else 
      { 
       Log.i("Test","Unknown UP:"+tmpCode); 
       return false; 
      } 
     } 
     else 
      return false; 
    } 
} 

ответ

0

Я нашел здесь http://developer.android.com/reference/android/text/method/KeyListener.html о onClickListener:

Ключевые давит на мягкие методы ввода не требуется, чтобы вызвать методы в этом слушателю, и на самом деле не рекомендуется делать андроида so.The по умолчанию клавиатура не будет запускать их для любой клавиши для любого приложения, нацеленного на Jelly Bean или позже, и будет поставлять его только для некоторых нажатий клавиш для приложений, нацеленных на Ice Cream Sandwich или ранее.

Также:

Обратите внимание, что в большинстве случаев этот интерфейс был заменен общими методами мягкого ввода, как это определено InputMethod; его следует использовать только в тех случаях, когда приложение имеет собственную экранную клавиатуру, а также хочет обрабатывать жесткие события клавиатуры, чтобы соответствовать им.

Итак, если вы находитесь в ситуации, описанной выше, попробуйте пересмотреть код, как рекомендовано в документации.
В качестве альтернативы, вы можете попробовать использовать это:

edit_txt.addTextChangedListener(new TextWatcher() { 
     int initialLength = 0; 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      initialLength = edit_txt.getText().length(); 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      int newLength = edit_txt.getText().length(); 
      if(newLength<initialLength) return; 
      if(edit_txt.getText().charAt(newLength-1)=='@'){ 
       Log.i("test", "@"); 
      } 
     } 

     @Override 
     public void afterTextChanged(Editable s) {} 
    }); 
+0

Это правда, KeyEvents только для физических клавиш, такие как громкость и кнопка питания, ваше предложение является правильным. Прослушивание входных событий только с ключевыми входами устарело, вход теперь может быть от микрофона ... я был abel для его реализации с помощью текстового наблюдателя. Спасибо. – Wafic

Смежные вопросы