91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android開發中怎么使用Dialog顯示與隱藏軟鍵盤

發布時間:2020-11-21 16:47:49 來源:億速云 閱讀:262 作者:Leah 欄目:移動開發

Android開發中怎么使用Dialog顯示與隱藏軟鍵盤?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

效果圖:

Android開發中怎么使用Dialog顯示與隱藏軟鍵盤

2.實現過程

先說說最開始的實現方法:

// 顯示Dialog
dialog.show();

// 顯示軟鍵盤
SoftInputUtils.showSoftInput(activity);

But,軟鍵盤并沒有顯示,顯示軟鍵盤有兩種方法,使用的是第一種方法,第二種方法在Dialog中沒有效果。

// 第一種,如果軟鍵盤在窗口上已經顯示,則隱藏,反之則顯示
InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);

// 第二種,強制顯示軟鍵盤,view為當前的輸入框對象
inputMethodManager.showSoftInput(view,InputMethodManager.SHOW_FORCED); 

 于是查看Dialog的源碼,發現Dialog的顯示和隱藏是通過Handler來處理的,會不會是顯示軟鍵盤的方法執行的太快了,于是在show方法后延時顯示軟鍵盤,發現是可以正常顯示的。

但是延時處理這種方法顯然不太好,有沒有一種Dialog顯示完成后就能回調的方法呢,嗯,有的,setOnShowListener方法,在OnShowListener接口的回調方法onShow中顯示軟鍵盤就可以了。軟鍵盤的隱藏并沒有這些限制,在dismiss之后隱藏,或者在回調方法onDismiss中隱藏都可以。

/**
 * 發送顯示Dialog的消息
 */
private void sendShowMessage() {
  if (mShowMessage != null) {
    // Obtain a new message so this dialog can be re-used
    Message.obtain(mShowMessage).sendToTarget();
  }
}


/**
 * 接收顯示或隱藏Dialog的消息
 */
private static final class ListenersHandler extends Handler {
  private WeakReference<DialogInterface> mDialog;

  public ListenersHandler(Dialog dialog) {
    mDialog = new WeakReference<DialogInterface>(dialog);
  }

  @Override
  public void handleMessage(Message msg) {
    switch (msg.what) {
      case DISMISS:
        ((OnDismissListener) msg.obj).onDismiss(mDialog.get());
        break;
      case CANCEL:
        ((OnCancelListener) msg.obj).onCancel(mDialog.get());
        break;
      case SHOW:
        ((OnShowListener) msg.obj).onShow(mDialog.get());
        break;
    }
  }
}

延時顯示軟鍵盤

new Thread() {
  @Override
  public void run() {
    super.run();
    activity.runOnUiThread(new Runnable() {
      @Override
      public void run() {
        SoftInputUtils.showSoftInput(activity);
      }
    });
  }
}.start();

3.代碼

顯示Dialog提示框

public class DialogUtils {

  private static Dialog dialog;

  /**
   * Dialog提示框消失方法
   */
  public static void dialogDismiss() {
    if (isDialogShowing()) {
      dialog.dismiss();
      dialog = null;
    }
  }

  /**
   * Dialog提示框是否正在運行
   *
   * @return Dialog提示框是否正在運行
   */
  public static boolean isDialogShowing() {
    return dialog != null && dialog.isShowing();
  }


  /**
   * 創建Dialog提示框
   *
   * @param context 上下文
   */
  private static void createDialog(Context context) {
    dialogDismiss();
    dialog = new Dialog(context, R.style.SampleTheme);
    dialog.setContentView(R.layout.layout_dialog);
    // 點擊彈窗外區域,彈窗不消失
    dialog.setCanceledOnTouchOutside(false);
  }

  /**
   * 顯示確認安全碼提示框
   *
   * @param activity       當前Activity
   * @param dialogOnClickListener 確定按鈕點擊事件
   */
  public static void showSecurityCodeInputDialog(final Activity activity,
                          final DialogOnClickListener dialogOnClickListener) {
    createDialog(activity);

    ImageView ivClose = (ImageView) dialog.findViewById(R.id.iv_close);
    final GridPasswordView gpvCode = (GridPasswordView) dialog.findViewById(R.id.gpv_code);
    Button btnOk = (Button) dialog.findViewById(R.id.btn_ok);

    ivClose.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        dialogDismiss();
      }
    });
    btnOk.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        String code = gpvCode.getPassWord();
        dialogOnClickListener.onClick(code);
      }
    });

    dialog.setOnShowListener(new DialogInterface.OnShowListener() {
      @Override
      public void onShow(DialogInterface dialog) {
        // 獲取焦點
        gpvCode.requestFocus();
        // 顯示軟鍵盤
        SoftInputUtils.showSoftInput(activity);
      }
    });
    dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
      @Override
      public void onDismiss(DialogInterface dialog) {
        // 隱藏軟鍵盤
        SoftInputUtils.hideSoftInput(activity);
      }
    });

    dialog.show();
  }

  public interface DialogOnClickListener {
    /**
     * 點擊事件
     *
     * @param str 回調參數
     */
    public void onClick(String str);
  }
}

顯示和隱藏軟鍵盤的方法

public class SoftInputUtils {

  /**
   * 顯示軟鍵盤,Dialog使用
   *
   * @param activity 當前Activity
   */
  public static void showSoftInput(Activity activity) {
    InputMethodManager inputMethodManager =
        (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
    inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
  }

  /**
   * 隱藏軟鍵盤
   *
   * @param activity 當前Activity
   */
  public static void hideSoftInput(Activity activity) {
    InputMethodManager inputMethodManager =
        (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(
        activity.getWindow().getDecorView().getWindowToken(), 0);
  }
}

調用顯示Dialog的方法

DialogUtils.showSecurityCodeInputDialog(this, new DialogUtils.DialogOnClickListener() {
  @Override
  public void onClick(String str) {
    Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
    DialogUtils.dialogDismiss();
  }
});

看完上述內容,你們掌握Android開發中怎么使用Dialog顯示與隱藏軟鍵盤的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平原县| 北京市| 重庆市| 聂拉木县| 横峰县| 肥城市| 三台县| 柏乡县| 濮阳市| 花莲县| 屏东县| 鹤峰县| 邮箱| 灵武市| 百色市| 宁陕县| 冕宁县| 久治县| 兴宁市| 永新县| 涪陵区| 确山县| 德格县| 句容市| 华宁县| 南阳市| 彭山县| 永城市| 清新县| 开化县| 巴彦淖尔市| 荔波县| 瑞安市| 海阳市| 瑞昌市| 安徽省| 永丰县| 和政县| 凤翔县| 鄄城县| 土默特右旗|