繁体   English   中英

在 Android 中更改 Edittext 焦点后隐藏键盘

[英]Hide keyboard after change focus of Edittext in Android

目前我在 Edittext 之间切换时遇到隐藏键盘的问题。 我用以下源代码隐藏了键盘:

   edittext1.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        edittext1.requestfocus();
        InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        return true;
    }
});

edittext2.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        edittext1.requestfocus();
        InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        return true;
    }
})

但是上面的代码没有成功。 每次我触摸它时,键盘都会显示。 当按住edittext并移出edittext区域时,它仍然显示键盘。

我不知道如何在以下情况下隐藏键盘:

  1. 用户从焦点触摸editext2和editext2.requestfocus()是edittext1
  2. 按住edittext并移出edittext,松开时,键盘显示

在这种情况下你能帮我吗? 谢谢。

public class CompositeOnChangeFocusListener implements OnFocusChangeListener{
      private View currentFocusedView = null;
      public void onFocusChange(View v, boolean hasFocus) {
           //on a focus change.
           if(currentFocusedView != v){
               InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
               imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
           }
           //case a view in this composite has focus.
           if(hasFocus) {
              currentFocusedView = v;
           }
           //case no view using this composite is focused.
           if(v == currentFocusedView && !hasFocus){
               currentFocusedView = null;
               InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
               imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
           }
    }
}

OnFocusChangeListener的这个实现将跟踪当前聚焦的View ,如果焦点已经改变,它将移除键盘。 它还将根据hasFocused boolean更新关注哪个视图。

OnFocusChangeListener listner = new CompositeOnFocusChangeListener();
//Attach the same exact listener to both.
edittext1.setOnFocusChangeListener(listner);
edittext2.setOnFocusChangeListener(listner);

还尝试将布局 xml 中的顶级视图设置为可聚焦,这样当您滑出EditText焦点时,应该 go 到顶级视图而不是粘在EditText上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM