现在我要实现的功能是 : 当软键盘弹出来的时候,点击右下角的"下一步" 或者"完成"按钮,能够执行我的跳转操作
Android app 中的三种监听软键盘的方式
----- 1,Activity的dispatchKeyEvent(KeyEvent event)方法,这是杀鸡用牛刀----- 2,可以监听 OnKeyListener onKeyListener = new OnKeyListener()
----- 3, 第三种方法我认为可以帮助程序员更精确的判断右下角按键情况,以便应对更加复杂的情况。它可以帮助程序员依据当前邮件下为“GO”,“done”,“search”键的情况下做出更细分的操作 edittext.setOnEditorActionListener(new TextView.OnEditorActionListener()
方法一,重写Activity的dispatchKeyEvent(KeyEvent event)方法 :
---- 该方法会在键盘被点击的时候触发,并且是在按下时触发一次,抬起时再触发一次,
---- 在其中监听KeyEventKey.KEYCODE_ENTER键(右下角确定键),当此键按下的时候, 隐藏输入法软键盘,执行跳转的操作
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
//监听键盘,以及事件的操作
if(event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN)
{
//隐藏软件盘
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(inputMethodManager.isActive()){
inputMethodManager.hideSoftInputFromWindow(MainActivity.this.getCurrentFocus().getWindowToken(), 0);
}
//执行下一步的操作
Intent intent = new Intent(this,OtherActivity.class);
startActivity(intent);
return true;
}
return super.dispatchKeyEvent(event);
}
方法二,我们可以使用OnKeyListener的方法来监听软键盘按键。
editText.setOnKeyListener(onKeyListener);
private OnKeyListener onKeyListener = new OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
//监听键盘的键 以及按下的操作
if(keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN)
{
//隐藏软件盘
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(inputMethodManager.isActive()){
inputMethodManager.hideSoftInputFromWindow(MainActivity.this.getCurrentFocus().getWindowToken(), 0);
}
//执行操作
Intent intent = new Intent(MainActivity.this,OtherActivity.class);
startActivity(intent);
return true;
}
return false;
}
};
方法三,使用 OnEditorActionListener 来监听
---- 第三种方法我认为可以帮助程序员更精确的判断右下角按键情况,以便应对更加复杂的情况。它可以帮助程序员依据当前邮件下为“GO”,“done”,“search”键的情况下做出更细分的操作。
---- 该方法中的actionId不知道为什么始终是为0
editText.setOnEditorActionListener(onEditorActionListener);
private OnEditorActionListener onEditorActionListener = new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
Log.i("TAG", "actionId : "+actionId );
//不知道为什么,这里的actionId始终为0,可能和真机测试有关吧,留下了个疑问,就只不知道如何修改该actionId值
if(actionId == EditorInfo.IME_ACTION_UNSPECIFIED){
/*隐藏软键盘*/
InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);
}
//执行操作
Intent intent = new Intent(MainActivity.this,OtherActivity.class);
startActivity(intent);
return true;
}
Log.i("TAG", "点击有响应");
return false;
}
};