我有一个编辑文本类的自定义实现。
基于这些XML属性.....
android:inputType="textPersonName"
android:inputType="textPersonName"
android:inputType="textEmailAddress"
android:inputType="textPassword"
我希望能够知道这在运行时(在Java代码)
我找到了这个方法,它给了我输入类型
getInputType()
这些是基于我上面发布的XML返回的值。
97、97、33129
但是,这些不对应这里列出的常数值
http://developer.android.com/reference/android/text/InputType.html如何在运行时知道编辑文本的输入类型?
您得到的数字是十进制数。例如textPassword具有十六进制的恒定值0x00000081
。当你把它转换成十进制时,它会得到129
。
因此你得到的输出是完美的。
参考此列表查找所有输入类型及其十六进制值。
如何从EditText中获取InputType
使用getInputType()
获取输入类型
int inputTypeValue = editText.getInputType();
InputType
值在文档中定义(十六进制)。
你可以用类似
的东西来测试这些值if (inputTypeValue == InputType.TYPE_CLASS_TEXT) { ... }
参见
- 设置
InputType
请看这个链接。您可以看到,您得到的确切数字是通过'OR'这两个常量:
https://developer.android.com/reference/android/widget/TextView attr_android % 3 ainputtype
想用InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS
获取textEmailAddress
, [OR] InputType.TYPE_CLASS_TEXT
的值
如:InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS
.
请参阅代码:
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);
编码快乐!