【整理】Android中EditText中的InputType類型含義與如何定義( 轉 )


轉自:【整理】Android中EditText中的InputType類型含義與如何定義

用到的時候查到了這篇文章覺得很不錯,就在此記錄下。

【背景】

經過一些Android中EditText方面的折騰:

【已解決】android中的EditText控件沒有獲得焦點但是輸入法卻彈出顯示->Activity中不要默認就顯示輸入法

【暫未去解決】Android中EditText如何在失去焦點后讓輸入法消失

【已解決】Android中EditText點擊獲得焦點后無法顯示輸入法鍵盤

【已解決】Android中代碼出現警告提示:android:phoneNumber is deprecated: Use inputType instead

然后對於EditText(或TextView)中的InputType的值的含義和類型,以及如何定義,有了個更清晰點的認識。

現在整理如下:

 

EditText的InputType屬性,可以在代碼中設置,也可以預先在xml中定義

設置EditText的InputType屬性,最簡單省事的辦法就是在定義EditText的xml中直接設置。

比如:

想要設置一個可編輯的文本框的輸入內容為只能輸入數字,則就可以:

(1)xml中定義InputType為number

?
1
2
3
4
< EditText 
     android:id = "@+id/variableValue"
     ......
     android:inputType = "number" />

(2)代碼中設置InputType為TYPE_CLASS_NUMBER | TYPE_NUMBER_VARIATION_NORMAL

?
1
2
3
EditText variableValueView = (EditText) variableLayout.findViewById(R.id.variableValue);
int inputType = InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_NORMAL;
variableValueView.setInputType(inputType);

 

這樣的話,之后界面中生成的EditText,當點擊后要輸入內容的時候,彈出的輸入法,自動變成那種只能輸入數字的小鍵盤類型的了:

EditText set to number show keyboard only show number

 

另外,附上,正常的普通字符串,即:

xml中:

?
1
android:inputType="text"

或代碼中:

?
1
someEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_NORMAL);

時,顯示出來的輸入法鍵盤的效果:

edittext inputtype is text how keyboard look like

 

EditText的InputType屬性對應的xml定義有哪些,以及代碼中設置的InputType類型有哪些

知道了設置EditText的InputType屬性值,既可以通過xml中定義,也可以在代碼中設置為InputType的某種值,但是到底這些值有哪些,以及分別對應的含義是啥,則可以參考官網:

TextView | Android Developers – android:inputType

中的完整的列表:

Constant

Value

Description

none

0x00000000

There is no content type. The text is not editable.

text

0x00000001

Just plain old text. Corresponds to TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_NORMAL.

textCapCharacters

0x00001001

Can be combined with text and its variations to request capitalization of all characters. Corresponds to TYPE_TEXT_FLAG_CAP_CHARACTERS.

textCapWords

0x00002001

Can be combined with text and its variations to request capitalization of the first character of every word. Corresponds to TYPE_TEXT_FLAG_CAP_WORDS.

textCapSentences

0x00004001

Can be combined with text and its variations to request capitalization of the first character of every sentence. Corresponds to TYPE_TEXT_FLAG_CAP_SENTENCES.

textAutoCorrect

0x00008001

Can be combined with text and its variations to request auto-correction of text being input. Corresponds to TYPE_TEXT_FLAG_AUTO_CORRECT.

textAutoComplete

0x00010001

Can be combined with text and its variations to specify that this field will be doing its own auto-completion and talking with the input method appropriately. Corresponds to TYPE_TEXT_FLAG_AUTO_COMPLETE.

textMultiLine

0x00020001

Can be combined with text and its variations to allow multiple lines of text in the field. If this flag is not set, the text field will be constrained to a single line. Corresponds to TYPE_TEXT_FLAG_MULTI_LINE.

textImeMultiLine

0x00040001

Can be combined with text and its variations to indicate that though the regular text view should not be multiple lines, the IME should provide multiple lines if it can. Corresponds to TYPE_TEXT_FLAG_IME_MULTI_LINE.

textNoSuggestions

0x00080001

Can be combined with text and its variations to indicate that the IME should not show any dictionary-based word suggestions. Corresponds to TYPE_TEXT_FLAG_NO_SUGGESTIONS.

textUri

0x00000011

Text that will be used as a URI. Corresponds to TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_URI.

textEmailAddress

0x00000021

Text that will be used as an e-mail address. Corresponds to TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_EMAIL_ADDRESS.

textEmailSubject

0x00000031

Text that is being supplied as the subject of an e-mail. Corresponds to TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_EMAIL_SUBJECT.

textShortMessage

0x00000041

Text that is the content of a short message. Corresponds to TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_SHORT_MESSAGE.

textLongMessage

0x00000051

Text that is the content of a long message. Corresponds to TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_LONG_MESSAGE.

textPersonName

0x00000061

Text that is the name of a person. Corresponds to TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PERSON_NAME.

textPostalAddress

0x00000071

Text that is being supplied as a postal mailing address. Corresponds to TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_POSTAL_ADDRESS.

textPassword

0x00000081

Text that is a password. Corresponds to TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PASSWORD.

textVisiblePassword

0x00000091

Text that is a password that should be visible. Corresponds to TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_VISIBLE_PASSWORD.

textWebEditText

0x000000a1

Text that is being supplied as text in a web form. Corresponds to TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_WEB_EDIT_TEXT.

textFilter

0x000000b1

Text that is filtering some other data. Corresponds to TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_FILTER.

textPhonetic

0x000000c1

Text that is for phonetic pronunciation, such as a phonetic name field in a contact entry. Corresponds to TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PHONETIC.

textWebEmailAddress

0x000000d1

Text that will be used as an e-mail address on a web form. Corresponds to TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS.

textWebPassword

0x000000e1

Text that will be used as a password on a web form. Corresponds to TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_WEB_PASSWORD.

number

0x00000002

A numeric only field. Corresponds to TYPE_CLASS_NUMBER | TYPE_NUMBER_VARIATION_NORMAL.

numberSigned

0x00001002

Can be combined with number and its other options to allow a signed number. Corresponds to TYPE_CLASS_NUMBER | TYPE_NUMBER_FLAG_SIGNED.

numberDecimal

0x00002002

Can be combined with number and its other options to allow a decimal (fractional) number. Corresponds to TYPE_CLASS_NUMBER | TYPE_NUMBER_FLAG_DECIMAL.

numberPassword

0x00000012

A numeric password field. Corresponds to TYPE_CLASS_NUMBER | TYPE_NUMBER_VARIATION_PASSWORD.

phone

0x00000003

For entering a phone number. Corresponds to TYPE_CLASS_PHONE.

datetime

0x00000004

For entering a date and time. Corresponds to TYPE_CLASS_DATETIME | TYPE_DATETIME_VARIATION_NORMAL.

date

0x00000014

For entering a date. Corresponds to TYPE_CLASS_DATETIME | TYPE_DATETIME_VARIATION_DATE.

time

0x00000024

For entering a time. Corresponds to TYPE_CLASS_DATETIME | TYPE_DATETIME_VARIATION_TIME.

 

如此,就可以自己去在xml或代碼中,分別試試,每種不同的InputType對應的都是什么效果了。

 

注意:通過代碼給InputType賦值時,不是設置TYPE_XXX_VARIATION_YYY,而是要設置TYPE_CLASS_XXX | TYPE_XXXX_VARAITION_YYY

之前在代碼中給InputType設置值,錯寫成:

?
1
inputType = InputType.TYPE_DATETIME_VARIATION_TIME;

導致,EditText點擊后,不顯示輸入法鍵盤,改為正確的:

?
1
inputType = InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_TIME;

就可以正常的顯示鍵盤了。

 

而后,也注意到官網

InputType | Android Developers

的解釋中的示例:

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

以及

TextView | Android Developers – android:inputType

中提示的:

“Must be one or more (separated by ‘|’) of the following constant values.”

即:

需要一個或多個值,中間通過豎杠"|"去抑或(按位或)的。

 

詳見:

【已解決】Android中EditText點擊獲得焦點后無法顯示輸入法鍵盤

 


免責聲明!

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



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