(原)android的alertdialog中加入edittext但是不彈出軟鍵盤等問題的解決與原因


摘要: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文檔.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM