美文网首页
Android 软键盘

Android 软键盘

作者: 一个不安分的Android开发 | 来源:发表于2021-01-24 20:15 被阅读0次

    软键盘弹出和隐藏

    弹出软键盘:

    InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    inputManager.showSoftInput(editText, 0);
    

    隐藏软键盘:

    InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    inputManager.hideSoftInputFromWindow(editText, 0);
    

    软键盘无法弹出问题

    有时候为了优化用户使用体验,希望一进入到界面,就自动弹出软键盘,但是 showSoftInput() 返回的却是 false,弹出软键盘失败。

    一般是页面还没加载成功,editText还未获取到焦点,所以弹出软键盘失败。可以延迟弹出,例如:

    editText.requestFocus();
    
        //延迟执行,界面需要初始化完成才可以打开软键盘
        editText.postDelayed(new Runnable() {
          @Override
          public void run() {
            InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    
            inputManager.showSoftInput(editText, 0);
    
          }
        }, 300);
    

    点击页面空白地方关闭软键盘

    所有view都注册 OnTouchListener 事件,点击时校验,如果不是 EditText 就关闭软键盘。

    public void registerHideKeyboard(View view){
    
        if (!(view instanceof EditText)) {
          view.setOnTouchListener(new OnTouchListener() {
    
            @SuppressLint("ClickableViewAccessibility")
            @Override
            public boolean onTouch(View v, MotionEvent arg1) {
                InputMethodManager im = (InputMethodManager) context
                  .getSystemService(Context.INPUT_METHOD_SERVICE);
                im.hideSoftInputFromWindow(v.getWindowToken(),           
                  InputMethodManager.HIDE_NOT_ALWAYS);
    
              return false;
            }
          });
        }
        if (view instanceof ViewGroup) {
    
          for(int i = 0; i < ((ViewGroup) view).getChildCount(); i++){
            View innerView = ((ViewGroup) view).getChildAt(i);
            registerHideKeyboard(innerView);
          }
        }
    
      }
    

    相关文章

      网友评论

          本文标题:Android 软键盘

          本文链接:https://www.haomeiwen.com/subject/hlfvzktx.html