我的android应用程序中有一个Edittext。我想不允许用户输入第一个空格字符..但是输入其他字符后用户也可以输入空格 ..我用过
<EditText
android:id="@+id/editText1_in_row"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="text"
android:digits="_,qwertzuiopasdfghjklyxcvbnm,QWERTYUIOPASDFGHJKLZXCVBNM,0123456789">
但在这种情况下,用户无法输入空格。
我还使用了文本观察器,但我不需要在输入文本时允许用户 android:数字有效。
答案 0 :(得分:9)
final EditText editText = (EditText)findViewById(R.id.editText1_in_row);
InputFilter filter = new InputFilter() {
boolean canEnterSpace = false;
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
if(editText.getText().toString().equals(""))
{
canEnterSpace = false;
}
StringBuilder builder = new StringBuilder();
for (int i = start; i < end; i++) {
char currentChar = source.charAt(i);
if (Character.isLetterOrDigit(currentChar) || currentChar == '_') {
builder.append(currentChar);
canEnterSpace = true;
}
if(Character.isWhitespace(currentChar) && canEnterSpace) {
builder.append(currentChar);
}
}
return builder.toString();
}
};
editText.setFilters(new InputFilter[]{filter});
并从EditText中删除此属性
android:digits="_,qwertzuiopasdfghjklyxcvbnm,QWERTYUIOPASDFGHJKLZXCVBNM,0123456789"
此代码完全符合您的需要。
答案 1 :(得分:3)
使用易于处理的InputFilter输入第一个空白字符忽略
editText上的第一个setFilters()方法
editText.setFilters(new InputFilter[]{ignoreFirstWhiteSpace()});
制作InputFilter
// ignore enter First space on edittext
public InputFilter ignoreFirstWhiteSpace() {
return 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.isWhitespace(source.charAt(i))) {
if (dstart == 0)
return "";
}
}
return null;
}
};
}
无需在XML上编写android:digits属性
删除此行
android:digits="_,qwertzuiopasdfghjklyxcvbnm,QWERTYUIOPASDFGHJKLZXCVBNM,0123456789"
答案 2 :(得分:0)
为什么你不能使用editText.getText()。trim();使用EditText数据时的功能
答案 3 :(得分:0)
如果要在EditText中过滤输入字符,则需要使用InputFilter。这是一个例子。 //仅允许字母或数字
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.isLetterOrDigit(source.charAt(i))) {
return "";
}
}
return null;
}
};
EditText text = (EditText)findViewById(R.id.edittext1);
text.setFilters(new InputFilter[]{filter});
详情请见here
答案 4 :(得分:0)
使用它。如果起始位置的字符是空格,请将textView Text设置为空白
editText1_in_row.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.length()>0 && s.subSequence(0, 1).toString().equalsIgnoreCase(" ")) {
editText1_in_row.setText(""); }
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
答案 5 :(得分:0)
https://stackoverflow.com/users/2868352/abhishek-v回答略有不同。
public class NoInitialSpaceFilter implements InputFilter {
@Override
public CharSequence filter(final CharSequence source, final int start, final int end, final Spanned dest, final int dstart, final int dend) {
if (dstart == 0) {
for (int i = start; i < end; i++) {
if (Character.isSpaceChar(source.charAt(i))) {
return "";
}
}
}
return null;
}
}
用法:
editText.setFilters(new InputFilter[]{new NoInitialSpaceFilter});
答案 6 :(得分:0)
只需限制用户输入空格,就像其他人在开始时所说:
[(1, [{'id': 123, 'hour': 5, 'min_group_hour': 3, 'max_group_hour': 5},
{'id': 345, 'hour': 3, 'min_group_hour': 3, 'max_group_hour': 5}]),
(2, [{'id': 345, 'hour': 3, 'min_group_hour': 3, 'max_group_hour': 3}]),
(3, [{'id': 65, 'hour': -2, 'min_group_hour': -2, 'max_group_hour': -2}])]
答案 7 :(得分:0)
这对我有用
android:inputType="textPersonName"
android:digits= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890_-!@#$%^*()"
答案 8 :(得分:0)
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890.,_-!@#$()+=><:;?"
答案 9 :(得分:0)
这是我用于EditText中的名称验证的过滤器。首字母大写,不包含空格和特殊字符。完成单词后,不能超过一个空格。
public void setNameFilter() {
InputFilter filter = new InputFilter() {
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i++) {
if (dend == 0) {
if (Character.isSpaceChar(source.charAt(i)) ||
!Character.isAlphabetic(source.charAt(i))) {
return Constants.Delimiter.BLANK;
} else {
return String.valueOf(source.charAt(i)).toUpperCase();
}
} else if (Character.isSpaceChar(source.charAt(i)) &&
String.valueOf(dest).endsWith(Constants.Delimiter.ONE_SPACE)) {
return Constants.Delimiter.BLANK;
} else if ((!Character.isSpaceChar(source.charAt(i)) &&
!Character.isAlphabetic(source.charAt(i)))) {
return Constants.Delimiter.BLANK;
}
}
return null;
}
};
editText.setFilters(new InputFilter[]{filter, new InputFilter.LengthFilter(Constants.Length.NAME_LENGTH)});
}