2011-09-30 166 views
14

我想在软键盘上做一些东西输入按键。看到我的代码和下面的输出。它执行两次,但我希望它只执行一次。如何解决它?软键盘输入键事件句柄

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    txt = (EditText)findViewById(R.id.txt); 
    txt.setOnKeyListener(new OnKeyListener() { 

     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (keyCode == KeyEvent.KEYCODE_ENTER) { 
       Log.e("test","--------- on enter"); 
       return false; 
      } 
      return false; 
     } 
    }); 
} 

This is my output for this

回答

19

尽可能最好的方式:

if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) { 
    Log.d(TAG, "enter_key_called"); 
} 
+2

也许应该去ACTION_UP代替,这样用户就可以取消我删除他或她的手指的事件?并为这些添加KeyEvent.KEYCODE_DPAD_CENTER。 – Kenneth

+0

https://developer.android.com/reference/android/view/View.OnKeyListener.html:'当硬件密钥被调度到视图时调用.'。 这不适用于软键盘。 – mbonnin

+0

在EditText视图中设置inputType =“text”,使其适用于软键盘 – SammyT