使用软键盘上的“ENTER”键而不是点击button

你好我有一个searchEditText和searchButton 。 当我inputsearch文本时,我想使用软键盘上的input键而不是searchButton来激活searchfunction。

提前感谢您的帮助。

你可以通过在你的EditText上设置一个OnKeyListener来实现。

这里是我自己的代码示例。 我有一个名为addCourseTextEditText ,当单击enter键或d-pad时,它将调用addCourseFromTextBox函数。

 addCourseText = (EditText) findViewById(R.id.clEtAddCourse); addCourseText.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_CENTER: case KeyEvent.KEYCODE_ENTER: addCourseFromTextBox(); return true; default: break; } } return false; } }); 

可能你可以添加一个属性到你的EditText像这样:

 android:imeOptions="actionSearch" 
 <EditText android:id="@+id/search" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="@string/search_hint" android:inputType="text" android:imeOptions="actionSend" /> 

然后,您可以通过为EditText元素定义TextView.OnEditorActionListener来监听动作button的按下。 在您的侦听器中,响应EditorInfo类中定义的相应IME操作ID,例如IME_ACTION_SEND。 例如:

 EditText editText = (EditText) findViewById(R.id.search); editText.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { boolean handled = false; if (actionId == EditorInfo.IME_ACTION_SEND) { sendMessage(); handled = true; } return handled; } }); 

来源: https : //developer.android.com/training/keyboard-input/style.html

向EditText添加一个属性,如android:imeOptions =“actionSearch”

这是做这个function的最好方法

imeOptions也有一些其他的值,比如“go”,“next”,“done”等。

这是我的一个应用程序如何处理的示例

  //searching for the Edit Text in the view final EditText myEditText =(EditText)view.findViewById(R.id.myEditText); myEditText.setOnKeyListener(new View.OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) || (keyCode == KeyEvent.KEYCODE_ENTER)) { //do something //true because you handle the event return true; } return false; } }); 

为了避免焦点前进到下一个可编辑字段(如果有的话),您可能需要忽略按键事件,但是处理按键事件。 我也更喜欢首先在keyCode上进行过滤,假设它稍微有效一些。 顺便说一句,记住返回true意味着你已经处理了事件,所以没有其他的监听器会。 无论如何,这是我的版本。

 ETFind.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER || keyCode == KeyEvent.KEYCODE_ENTER) { if (event.getAction() == KeyEvent.ACTION_DOWN) { // do nothing yet } else if (event.getAction() == KeyEvent.ACTION_UP) { findForward(); } // is there any other option here?... // Regardless of what we did above, // we do not want to propagate the Enter key up // since it was our task to handle it. return true; } else { // it is not an Enter key - let others handle the event return false; } } });