android中自訂的對話方塊中的EditText無法彈出IME解決方案

來源:互聯網
上載者:User

標籤:

很奇怪的是,如果你用原生的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解決方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.