我需要一个EditText才能允许字母和大写第一个字符。
为了只允许字母,我设置了属性
XML布局中的android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "
并且它正常工作。然后,我还将属性android:inputType="textCapSentences"
设置为大写第一个字母,但它不起作用。
为了知道发生了什么,我试图删除digits属性,然后textCapSentences属性工作正常。
所以,事情是:我可以使用一个属性或另一个属性,但我无法让它们同时工作。我怎么解决这个问题?我可能需要以编程方式解决它吗?感谢。
<EditText
android:id="@+id/et_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "
android:inputType="textCapSentences"
android:hint="@string/et_hint" />
答案 0 :(得分:1)
我不知道如何一起使用这两个属性,但如果一个单独使用,一个解决方案可能是在EditText上使用textCapSentences并编写文本过滤器,如下所示:
public static InputFilter[] myFilter = new InputFilter[] {
new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i++) {
if (!Character.isLetterOrDigit(source.charAt(i)) &&
source.charAt(i) != '@' &&
source.charAt(i) != '#') {
Log.i(TAG, "Invalid character: " + source.charAt(i));
return "";
}
}
return null;
}
}
};
这个例子接受0-9,所有字母(大写和小写),以及charcters @和#,只是举个例子。如果您尝试输入任何其他字符,它将返回&#34;&#34;,并且基本上忽略它。
初始化编辑文本时应用它:
EditText editText = (EditText) findViewById(R.id.my_text);
editText.setFilters(myFilter);
答案 1 :(得分:1)
保留textCapSentences属性并以编程方式执行字母检查:
et_name.setFilters(new InputFilter[] { filter });
InputFilter filter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
for (int i = start;i < end;i++) {
if (!Character.isLetter(source.charAt(0))) {
return "";
}
}
return null;
}
};
答案 2 :(得分:0)
如果您希望将每个新字词大写,则应使用其他inputType:
android:inputType="textCapWords"
如果您想要将每个新句子的第一个字母大写,您可以将.
添加到您的数字中,这将有助于系统识别新句子:
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ. "
答案 3 :(得分:0)
您可以为此属性使用多个值android:inputType="textCapSentences|text"
希望这会有所帮助。