首先看下效果图,看看是不是自己要的效果。
如上图所示,在android 开发中有时候需要将搜索动作放置在软键盘上而不是放在当前的这个页面上,这就又是一个小技巧了。
在动手实现之前首先得了解一下android 软键盘的属性。
一般设置android软键盘属性的时候是在Mainfest清单文件中的activity属性中直接添加,比如说:
下面先介绍下软键盘android:windowSoftInputMode属性值吧。
它的设置必须是下面列表中的一个值,或一个”state…”值加一个”adjust…”值的组合。在任一组设置多个值——多个”state…”values,例如&mdash有未定义的结果。各个值之间用|分开。例如:<activity android:windowSoftInputMode="stateVisible|adjustResize". . . >在这设置的值(除"stateUnspecified"和"adjustUnspecified"以外)将覆盖在主题中设置的值。
【1】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
【2】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
【3】stateHidden:用户选择activity时,软键盘总是被隐藏
【4】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
【5】stateVisible:软键盘通常是可见的
【6】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
【7】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
【8】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
【9】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
准备工作已完成。点击一个EditText的时候通常会弹出系统自带的软键盘,那么要把回车键改为搜索键就需要在EditText点击事件的时候做动作了。这时候默认已经在当前需要改变的activity中设置了android:windowSoftInputMode="stateVisible"这条属性。下面看activity中的代码。
<span style="font-size:14px;">private EditText searchET;//定义EditText
searchET = (EditText) findViewById(R.id.search_et);//找到控件
//设置监听事件
searchET.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
// 修改回车键功能
if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN ) {
// 先隐藏键盘
((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(SearchEnterprise.this
.getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
//接下来在这里做你自己想要做的事,实现自己的业务。
}
return false;
}
});</span>
在xml里面需要设置EditText的两条属性:
注意,这两条属性必须设置,不然没有效果。
从上面的代码可以看出,给EditText设置监听事件的时候需要实现的是setOnKeyListener这个事件。这个事件是专门针对软键盘的一个事件。然后在里面实现自己的业务就是。