使用软键盘上的“ENTER”键而不是点击button
你好我有一个searchEditText
和searchButton
。 当我inputsearch文本时,我想使用软键盘上的input键而不是searchButton
来激活searchfunction。
提前感谢您的帮助。
你可以通过在你的EditText
上设置一个OnKeyListener
来实现。
这里是我自己的代码示例。 我有一个名为addCourseText
的EditText
,当单击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; } } });