美文网首页
Android 弹出窗的键盘隐藏问题

Android 弹出窗的键盘隐藏问题

作者: oi_68bc | 来源:发表于2017-10-24 14:21 被阅读0次

    最近在项目开发的时候,测试给提了这样一个bug:弹出的对话框关闭后,键盘不隐藏。这里说明一下,因为弹出框有EditText,所以会弹出键盘。起初看到这个问题的时候,觉得很简单。于是修改如下:

    
    DaShangPopup payPopup =new DaShangPopup(LiveDetailActivity.this);
    
    payPopup.setSureText("确定");
    
    payPopup.setOnClickListener(newView.OnClickListener() {
    
      @Override
    
      public void onClick(View v) {
    
        if(v.getId() == R.id.sure) {
    
          String pwd =payPopup.getPwd();
    
          payMoney(pwd);
    
      }
    
      //隐藏键盘,inputEt是输入框
    
      hideSoftKeyboard();
    
      InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    
      inputmanger.hideSoftInputFromWindow(inputEt.getWindowToken(),0);
    
    }
    
    });
    
    payPopup.showAtLocation(LiveDetailActivity.this.getContentView(),Gravity.CENTER,0,0);
    
    

    运行后发现不起作用。为啥不起作用呢?看下hideSoftInputFromWindow的逻辑:

    
    public boolean hide SoftInputFromWindow(IBinder windowToken, intflags) {
    
      return  hideSoftInputFromWindow(windowToken,flags, null);
    
    }
    
    
    
    public boolean hideSoftInputFromWindow(IBinder windowToken, intflags,
    
    ResultReceiver resultReceiver) {
    
      checkFocus();
    
      synchronized(mH) {
    
        if(mServedView==null||mServedView.getWindowToken() != windowToken) {
    
        return false;
    
      }
    
      try{
      
      returnmService.hideSoftInput(mClient,flags,resultReceiver);
    
      }catch(RemoteException e) {
    
      }
    
      return false;
    
      }
    
    }
    
    

    看到这里基本就明白为啥没反应了,弹窗都消失了,windowToken当然就自然返回null了。

    找到问题解决办法就简单了,重写PopupWindow的onDismiss方法,在窗口消失之前,隐藏键盘就可以了。代码如下:

    
    @Override
    
    public void dismiss() {
    
      InputMethodManager mInputMethodManager = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
      mInputMethodManager.hideSoftInputFromWindow(pwdEt.getWindowToken(),InputMethodManager.RESULT_UNCHANGED_SHOWN);
      super.dismiss();
    }
    
    

    相关文章

      网友评论

          本文标题:Android 弹出窗的键盘隐藏问题

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