Android 更改软键盘右下角按键的样式以及监听此键的方法

一、我们在开发Android App时有时候会遇到更改软键盘右下角按键的样式

  • 我们可以随自己的需求更改软键盘右下角的显示样式,例如:搜索,下一步,Q(搜索图标)
    具体对应:
    1. actionNone : 按下后光标到下一行(回车)
    2. actionGo : 按下后搜索(Go)
    3. actionSearch : 放大镜
    4. actionSend : Send 按下后发送
    5. actionNext : Next 下一步
    6. actionDone : Done,确定/完成,隐藏软键盘(包括不是最后一个文本输入框的情况也会隐藏)
      使用方法:
      在xml里面写布局时直接加给EditTxt的imeOptions属性,例如:
<EditText  
        android:id="@+id/et"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:imeOptions="actionSearch"/>
注:此时会发现并比起作用,这是因为少设置一个参数,既添加属性 android:singleLine="true"(因为默认是多行模式,而右下角的按键是用于换行的,当设置为单行模式后就没必要换行了)

二、我们在开发Android App时有时候还会遇到监听软键盘右下角按键的需求

例如我们在EditText里面输入内容后可以点击软键盘右下角的“搜索”按键进行搜索,或者在输入完毕后,点击右下角的"done"就马上进行下一步操作(例如将内容上传到服务器)。

下面列举几个方法:

  • 重写Activity的dispatchKeyEvent(KeyEvent event)方法,在其中监听KeyEventKey.KEYCODE_ENTER键(右下角确定键),当此键按下的时候,隐藏输入法软键盘,将EditText内容上传到服务器
    例如:
    @Override  
        public boolean dispatchKeyEvent(KeyEvent event) {  
            if(event.getKeyCode() == KeyEvent.KEYCODE_ENTER){  
                /*隐藏软键盘*/  
                InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
                if(inputMethodManager.isActive()){  
                    inputMethodManager.hideSoftInputFromWindow(MainActivity.this.getCurrentFocus().getWindowToken(), 0);  
                }  
                // 上传代码 
                return true;  
            }  
            return super.dispatchKeyEvent(event);  
        }  
  • 重写dispatchKeyEvent(KeyEvent event),这种方法,因为我们可能在这个方法中进行其他任务,所以我们可以使用OnKeyListener的方法来监听软键盘按键。
et.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 imm= (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
                  if(imm.isActive()){  
                      imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);  
                  }  
                 // 对应逻辑操作
                  return true;  
              }  
              return false;  
          }  
      };  
  • 第三种方法,更加细化,我们可以解决更加复杂的情况。我们可以根据右下键是“GO”,“Done”,“Search”键的情况下做出更加具体的操作。
    代码案例:
    et.setOnEditorActionListener(new TextView.OnEditorActionListener() {  

                @Override  
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event){  
                    //判断是否是“GO”键 
                    if(actionId == EditorInfo.IME_ACTION_GO){  
                        //隐藏软键盘  
                        InputMethodManager imm = (InputMethodManager) v  
                                .getContext().getSystemService(  
                                        Context.INPUT_METHOD_SERVICE);  
                        if (imm.isActive()) {  
                            imm.hideSoftInputFromWindow(  
                                    v.getApplicationWindowToken(), 0);  
                        }  
                        // 对应逻辑操作
                        return true;  
                    }  
                    return false;  
                }  
            });  

猜你喜欢

转载自blog.csdn.net/huahuaxiaolian/article/details/70933095