Android開發(fā)中怎么使用Dialog顯示與隱藏軟鍵盤?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
創(chuàng)新互聯(lián)自2013年起,先為西充等服務建站,西充等地企業(yè),進行企業(yè)商務咨詢服務。為西充企業(yè)網站制作PC+手機+微官網三網同步一站式服務解決您的所有建站問題。
效果圖:
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)