问题
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