问题
I have a custom implementation of an edit text class.
Based on these XML attribute.....
android:inputType="textPersonName"
android:inputType="textPersonName"
android:inputType="textEmailAddress"
android:inputType="textPassword"
I want to be able to know this at run time (In Java Code)
I have found this method which gives me the input type
getInputType()
And these are the values returned based on the XML I posted above.
97,97,33,129
However, these do not correspond to the constant values listed here
http://developer.android.com/reference/android/text/InputType.html
How can I know the input type of an edit text at run time?
回答1:
The numbers you are getting are decimal numbers.For example textPassword has constant value 0x00000081
in hex.When you convert that in decimal it will give 129
.
Hence the output you are getting is perfect.
Refer this to find the list of all input-types with their hex values.
回答2:
How to get the InputType from an EditText
To get the input type use getInputType().
int inputTypeValue = editText.getInputType();
The InputType
values are defined (in hexadecimal) in the documentation.
You can test the values with something like
if (inputTypeValue == InputType.TYPE_CLASS_TEXT) { ... }
See also
- Setting the InputType
回答3:
Please see this link. You see that the exact number you get is by 'OR'ing the two Constants:
https://developer.android.com/reference/android/widget/TextView#attr_android%3AinputType
like to get the value of textEmailAddress
, [OR] InputType.TYPE_CLASS_TEXT
with InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS
,
like this: InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS
.
Please see the code:
String strInputType;
final int inputType = editText.getInputType();
switch (inputType) {
case (InputType.TYPE_TEXT_FLAG_CAP_WORDS|InputType.TYPE_CLASS_TEXT): {
strInputType = "Name ";
}
break;
case (InputType.TYPE_TEXT_VARIATION_PASSWORD|InputType.TYPE_CLASS_TEXT): {
strInputType = "Password or Confirm Password ";
}
break;
case (InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS|InputType.TYPE_CLASS_TEXT): {
strInputType = "Email ";
}
break;
case InputType.TYPE_CLASS_PHONE: {
strInputType = "Phone Number ";
}
break;
case InputType.TYPE_CLASS_DATETIME: {
strInputType = "Date ";
}
break;
case InputType.TYPE_CLASS_NUMBER: {
strInputType = "Number ";
}
break;
case InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS: {
strInputType = "Address ";
}
break;
default: {
strInputType = "Field ";
}
break;
}
Resources res = baseActivity.getResources();
String message = res.getString(R.string.field_blank, strInputType);
Happy Coding!
来源:https://stackoverflow.com/questions/32477817/android-get-edittext-input-type-at-runtime