欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

如圖

如圖

一開始覺得很簡(jiǎn)單,監(jiān)聽下onDimiss()方法,在里面隱藏鍵盤不就行了。

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

這是為什么呢?為什么鍵盤不消失呢?

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

 /**
   * 關(guā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);
    }
  }

這里寫圖片描述

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

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

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

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

2.在dismiss之前就隱藏軟鍵盤,因?yàn)樵O(shè)置setCancelOnTouchOutside(true),會(huì)響應(yīng)Dialog類的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();
  }

重寫下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)閉鍵盤
  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)閉軟鍵盤。

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

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

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

您可能感興趣的文章:

相關(guān)文章

  • ERROR/AndroidRuntime(17121)的問題解決

    ERROR/AndroidRuntime(17121)的問題解決

    ERROR/AndroidRuntime(17121)的問題解決,需要的朋友可以參考一下
    2013-05-05
  • init output stream初始化輸出流源碼分析

    init output stream初始化輸出流源碼分析

    這篇文章主要為大家介紹了init output stream初始化輸出流源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Android快速分析apk工具aapt的使用教程

    Android快速分析apk工具aapt的使用教程

    這篇文章主要介紹了Android快速分析apk工具aapt的使用教程,本文講解了什么是aapt、主要用法、使用aapt、查看apk的基本信息、查看基本信息、查看應(yīng)用權(quán)限等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Android中CountDownTimer倒計(jì)時(shí)器用法實(shí)例

    Android中CountDownTimer倒計(jì)時(shí)器用法實(shí)例

    這篇文章主要介紹了Android中CountDownTimer倒計(jì)時(shí)器用法,以實(shí)例形式分析了Android中CountDownTimer類的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • 深入理解Kotlin的泛型系統(tǒng)

    深入理解Kotlin的泛型系統(tǒng)

    Kotlin 泛型即 “參數(shù)化類型”,將類型參數(shù)化,可以用在類,接口,方法上。下面 這篇文章主要給大家介紹了關(guān)于Kotlin泛型系統(tǒng)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-12-12
  • Android實(shí)現(xiàn)網(wǎng)易云音樂高仿版流程

    Android實(shí)現(xiàn)網(wǎng)易云音樂高仿版流程

    這篇文章主要介紹了Android實(shí)現(xiàn)網(wǎng)易云音樂高仿版,包含了首頁復(fù)雜發(fā)現(xiàn)界面布局和功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Android Studio升級(jí)4.1.1后各種錯(cuò)誤和解決方案

    Android Studio升級(jí)4.1.1后各種錯(cuò)誤和解決方案

    這篇文章主要介紹了Android Studio升級(jí)4.1.1后各種錯(cuò)誤和解決方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Android如何獲取圖片或視頻略縮圖

    Android如何獲取圖片或視頻略縮圖

    這篇文章主要為大家詳細(xì)介紹了Android如何獲取圖片或視頻略縮圖的方法,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Android實(shí)現(xiàn)跨進(jìn)程接口回掉的方法

    Android實(shí)現(xiàn)跨進(jìn)程接口回掉的方法

    這篇文章主要給大家介紹了關(guān)于Android如何實(shí)現(xiàn)跨進(jìn)程接口回掉的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Android實(shí)現(xiàn)隨手指移動(dòng)小球

    Android實(shí)現(xiàn)隨手指移動(dòng)小球

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)隨手指移動(dòng)小球,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08

最新評(píng)論