摘要:alertdialog中加入edittext但是不彈出軟鍵盤等問題網上有很多不管用的解決方案,
本文意在給出更有效的解決辦法,並初步探究其原因
正文
在對話框中插入文本框是十分常見的需求
通常我們選擇在代碼中創建edittext對象
這個時候就需要在代碼中給edittext設置輸入屬性了
但是經常發現設置的屬性不起作用,甚至都不彈出軟鍵盤(雖然實體鍵盤可以輸入)
問題的解決方案有很多種,這里介紹一種我比較常用的方法:
inputPassEditText.setInputType(InputType.TYPE_CLASS_TEXT|InputType.XXX);
就是在設置輸入type的時候,按位或上一個inputtype.TYPE_CLASS_TEXT
它在16進制中是0x80
例如一個密碼輸入對話框可以這么寫
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); final EditText inputPassEditText = new EditText(MainActivity.this); builder.setView(inputPassEditText);
//輸入框是密碼風格的 inputPassEditText.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD);
這樣不僅解決了軟鍵盤不彈出的問題,而且也得到了預期的輸入效果.
問題解決.
=========================華麗分割線,下面更精彩===================================
其實InputType是android當中的一個類
android.text.InputType
這個類並沒有什么方法,只有幾十個靜態常量
TYPE_CLASS_TEXT就是其中最常用的一個
以TYPE_CLASS開頭的常量共有這四種
int TYPE_CLASS_DATEtIME
int TYPE_CLASS_NUMBER
int TYPE_CLASS_PHONE
int TYPE_CLASS_TEXT
Examples它們的用法示例
- A password field with with the password visible to the user:(可視的密碼輸入區域)
- inputType = TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
- A multi-line postal address with automatic capitalization:(郵政格式的多行輸入)
- inputType = TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_POSTAL_ADDRESS | TYPE_TEXT_FLAG_MULTI_LINE
- A time field:(輸入時間)
- inputType = TYPE_CLASS_DATETIME | TYPE_DATETIME_VARIATION_TIME
可見google的api暴露給我們的用法就是利用CLASS與FLAG等按位或來達到想要的效果(google精心設計了每個常量的2進制位)
這里我給出兩個常用的例子:
輸入數字密碼
inputPassEditText.setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_VARIATION_PASSWORD);
輸入數字明文:
inputPassEditText.setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_VARIATION_NORMAL);
具體的用法還有很多,在此就不一一列舉了,有興趣的讀者可以去查閱google文檔.