最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

dialog dismiss時(shí)鍵盤(pán)不消失的問(wèn)題淺析及解決辦法

 更新時(shí)間:2017年01月09日 17:14:05   作者:豬豬上  
這篇文章主要介紹了dialog dismiss時(shí)鍵盤(pán)不消失的問(wèn)題淺析及兩種解決方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下

當(dāng)setCanceledOnTouchOutside(true),點(diǎn)擊陰影處,dialog dismiss時(shí)鍵盤(pán)不消失的問(wèn)題。

如圖

如圖

一開(kāi)始覺(jué)得很簡(jiǎn)單,監(jiān)聽(tīng)下onDimiss()方法,在里面隱藏鍵盤(pán)不就行了。

但是發(fā)現(xiàn)大多數(shù)手機(jī)都不會(huì)隱藏(魅族x4會(huì)隱藏)。

這是為什么呢?為什么鍵盤(pán)不消失呢?

經(jīng)過(guò)測(cè)試,發(fā)現(xiàn)edittext.getWindowToken()為null。

 /**
   * 關(guān)閉鍵盤(pán)
   *
   * @param context
   * @param et
   */
  public static void hideKeyboard(Context context, EditText et) {
    InputMethodManager imm = (InputMethodManager) context
        .getSystemService(Context.INPUT_METHOD_SERVICE);
    LogUtils.showLog("hideKeyboard  imm.isActive() = "+imm.isActive()+"    et.getWindowToken() = "+et.getWindowToken());
    if (imm.isActive()) {
      imm.hideSoftInputFromWindow(et.getWindowToken(), 0);
    }
  }

這里寫(xiě)圖片描述

這是因?yàn)楫?dāng)ondismiss 方法執(zhí)行的時(shí)候,dialog已經(jīng)消失了。已經(jīng)獲取不到windowToken了。

目前發(fā)現(xiàn)有兩種方式覺(jué)得這樣的問(wèn)題

1.在ondismiss()方法里面這樣隱藏軟鍵盤(pán)

 @Override
  public void onDismiss(DialogInterface dialog) {
    InputMethodManager inputMgr = (InputMethodManager) context
        .getSystemService(Context.INPUT_METHOD_SERVICE);
    inputMgr.toggleSoftInput(InputMethodManager.HIDE_NOT_ALWAYS, 0);
  }

2.在dismiss之前就隱藏軟鍵盤(pán),因?yàn)樵O(shè)置setCancelOnTouchOutside(true),會(huì)響應(yīng)Dialog類(lèi)的onTouch方法。

public boolean onTouchEvent(MotionEvent event) {
    if (mCancelable && mShowing && mWindow.shouldCloseOnTouch(mContext, event)) {
      cancel();
      return true;
    }
    return false;
  }
/**
   * Cancel the dialog. This is essentially the same as calling {@link #dismiss()}, but it will
   * also call your {@link DialogInterface.OnCancelListener} (if registered).
   */
  public void cancel() {
    if (!mCanceled && mCancelMessage != null) {
      mCanceled = true;
      // Obtain a new message so this dialog can be re-used
      Message.obtain(mCancelMessage).sendToTarget();
    }
    dismiss();
  }

重寫(xiě)下onTouch()方法就可以了。代碼如下

 @Override
  public boolean onTouchEvent(MotionEvent event) {
    if (isShowing() && shouldCloseOnTouch(getContext(),event)){
      ViewHelper.hideKeyboard(context, et_reply_comment);
    }
    return super.onTouchEvent(event);
  }
  public boolean shouldCloseOnTouch(Context context, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN
        && isOutOfBounds(context, event) && getWindow().peekDecorView() != null) {
      return true;
    }
    return false;
  }
  private boolean isOutOfBounds(Context context, MotionEvent event) {
    final int x = (int) event.getX();
    final int y = (int) event.getY();
    final int slop = ViewConfiguration.get(context).getScaledWindowTouchSlop();
    final View decorView = getWindow().getDecorView();
    return (x < -slop) || (y < -slop)
        || (x > (decorView.getWidth()+slop))
        || (y > (decorView.getHeight()+slop));
  }
   // 關(guān)閉鍵盤(pán)
  public static void hideKeyboard(Context context, EditText et) {
    InputMethodManager imm = (InputMethodManager) context
        .getSystemService(Context.INPUT_METHOD_SERVICE);
    LogUtils.showLog("hideKeyboard  imm.isActive() = "+imm.isActive()+"    et.getWindowToken() = "+et.getWindowToken());
    if (imm.isActive()) {
      imm.hideSoftInputFromWindow(et.getWindowToken(), 0);
    }
  }

經(jīng)測(cè)試,以上兩種方法都可以關(guān)閉軟鍵盤(pán)。

另外附在dialog啟動(dòng)時(shí)彈出軟鍵盤(pán)代碼,重寫(xiě)onStart方法

@Override
  protected void onStart() {
    super.onStart();
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
  }

以上所述是小編給大家介紹的dialog dismiss時(shí)鍵盤(pán)不消失的問(wèn)題淺析,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

您可能感興趣的文章:

相關(guān)文章

最新評(píng)論

东明县| 抚宁县| 探索| 丘北县| 临夏县| 陆川县| 青浦区| 外汇| 洪洞县| 麻阳| 新郑市| 江孜县| 洛阳市| 建德市| 正阳县| 衢州市| 嵩明县| 得荣县| 利辛县| 馆陶县| 防城港市| 新泰市| 齐河县| 浦江县| 大厂| 交口县| 新化县| 镇坪县| 昆山市| 阜南县| 泰安市| 商水县| 丽江市| 清原| 黔东| 五峰| 文山县| 阿拉善盟| 汝州市| 穆棱市| 嘉义市|