Android 弹出窗的键盘隐藏问题

最近在项目开发的时候,测试给提了这样一个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 弹出窗的键盘隐藏问题)