標籤:
很奇怪的是,如果你用原生的AlertDialog,通過setView(new EditText())的方法添加輸入框,永遠都能彈出IME;
而在我們自訂AlertDialog中,經常會遇到彈不出IME的問題,這裡我分為2中情況:
一. 在Activity中,自訂AlertDialog中的EditText彈不出IME
方法一: 在繼承AlertDialog, onCreate()方法中, 設定如下:
requestWindowFeature(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
原因通過看AlertDialog的說明文檔即可得知,它預設是這個:
requestWindowFeature(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
文檔說AlertDialog預設任務你是不需要和IME互動,所以設定了一個無EditText的FLAG,,而如果你想和IME互動,就設定FLAG_NOT_FOCUSABLE,
方法二: 繼承Dialog,Dialog預設的樣式很醜,,但是需要做2個操作,該操作都是在onCreate方法中進行的
第一: 去掉黑色頭部:
requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉黑色頭部
第二: 去掉黑色背景:
getWindow().setBackgroundDrawableResource(android.R.color.transparent);//只有這樣才能去掉黑色背景
二.在Fragment中,自訂AlertDialog中的EditText彈不出IME
這種情況下,activity中的方法是不行的。
我也嘗試了設定IME的各項設定,如:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
也在fragment中和activity進行同樣的設定,也讓EditText.requestFocus(),但是都不行;
也嘗試了在點擊EditText的時候,使用InputMethodManager強制彈出,仍然是不行;
後來我在show()方法調用之前,用setView(new EditText())添加一個空的EditText,由於是自訂的AlertDialog,有我們指定的布局,所以這個空的
EditText是不會顯示的,這個時候就能彈出對話方塊了,具體原因不明,猜測應該還是焦點擷取的問題,
android中自訂的對話方塊中的EditText無法彈出IME解決方案