转自:http://blog.csdn.net/coderk2014/article/details/51766485
Android项目中要实现这样一个需求,在搜索框中输入关键词,在手机弹出的软键盘中,回车键变为搜索键,点击搜索键执行搜索。
1、修改EditText属性:
[html] view plain copy
- <EditText
- android:id="@+id/et_search"
- android:layout_width="100dp"
- android:layout_height="25dp"
- android:textSize="12sp"
- android:hint="请输入关键词"
- android:imeOptions="actionSearch"
- android:singleLine="true"/>
android:imeOption="actionSearch"的作用是将回车两字改为搜索,
android:singleLine="true"的作用是防止搜索框换行。
2、OnKeyListener事件:
[java] view plain copy
- et_search=(EditText)findViewById(R.id.et_search);
- et_search.setOnKeyListener(new View.OnKeyListener() {
- @Override
- public boolean onKey(View v, int keyCode, KeyEvent event) {
-
- if (keyCode == KeyEvent.KEYCODE_ENTER) {
-
- ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
- .hideSoftInputFromWindow(SearchActivity.this.getCurrentFocus()
- .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
-
- search();
- }
- return false;
- }
- });
做到这一步,前面提到的项目需求基本满足了。
3、点击时执行两次监听事件的问题:
执行上述代码我发现每次点击搜索都会执行两次搜索方法,后来发现时忘了没有加event.getAction() == KeyEvent.ACTION_DOWN这句判断。
修改代码如下:
[java] view plain copy
- et_search=(EditText)findViewById(R.id.et_search);
- et_search.setOnKeyListener(new View.OnKeyListener() {
- @Override
- public boolean onKey(View v, int keyCode, KeyEvent event) {
-
- if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {
-
- ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
- .hideSoftInputFromWindow(SearchActivity.this.getCurrentFocus()
- .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
-
- search();
- }
- return false;
- }
- });