欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

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

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

創(chuàng)新互聯(lián)自2013年起,先為西充等服務建站,西充等地企業(yè),進行企業(yè)商務咨詢服務。為西充企業(yè)網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。

效果圖:

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

2.實現(xiàn)過程

先說說最開始的實現(xiàn)方法:

// 顯示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的源碼,發(fā)現(xiàn)Dialog的顯示和隱藏是通過Handler來處理的,會不會是顯示軟鍵盤的方法執(zhí)行的太快了,于是在show方法后延時顯示軟鍵盤,發(fā)現(xiàn)是可以正常顯示的。

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

/**
 * 發(fā)送顯示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();
  }


  /**
   * 創(chuàng)建Dialog提示框
   *
   * @param context 上下文
   */
  private static void createDialog(Context context) {
    dialogDismiss();
    dialog = new Dialog(context, R.style.SampleTheme);
    dialog.setContentView(R.layout.layout_dialog);
    // 點擊彈窗外區(qū)域,彈窗不消失
    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開發(fā)中怎么使用Dialog顯示與隱藏軟鍵盤的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

網站欄目:Android開發(fā)中怎么使用Dialog顯示與隱藏軟鍵盤
本文URL:http://www.chinadenli.net/article44/jsgdee.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站策劃手機網站建設網站導航營銷型網站建設網站排名Google

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿網站建設