在我的EditText中,我需要限制除字母,数字和单个空间之外的所有字符。我试图添加到XML:
android:digits="abcdefghijklmnopqrstuvwxyz1234567890 "
我仍然可以输入多个空格。如何更改此设置并允许用户输入不超过1个空格?
答案 0 :(得分:0)
您必须以编程方式检查它。但请保留您拥有的XML内容。那仍然很好。只需检查空格数。试试这个:
String str = myEditText.toString();
int first = str.indexOf(" ");
boolean noneOrOneSpace = (first != -1) ? str.indexOf(" ", first + 1) : true;
然后你需要应用它来在editText的textChangedListener中使用它。当发生更改然后删除并注意到第二个空格然后删除EditText中的最后一个字符
答案 1 :(得分:0)
数字不起作用。
您可以尝试使用TextWatcher,然后将用户输入的所有多个空格替换为单个空格。
例如:
yourEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
yourEditText.removeTextChangeListener(this);
// Uses append() method on edit-text instead of setText()
// in an order to prevent soft keyboard reset.
String tempStr = s.toString().substring(0, s.length());
yourEditText.getText().clear();
// This line replaces all the multiple spaces with single space.
tempStr = tempStr.replaceAll("\\s+", " ");
yourEditText.append(tempStr);
yourEditText.setSelection(tempStr.length());
yourEditText.addTextChangedListener(this);
}
@Override
public void afterTextChanged(Editable s) {}
});
答案 2 :(得分:0)
我在输入文字时在StackOverflow和google上搜索了很多,只在名称字段中输入了一个空格
这是可以正常工作的代码段。在文本更改后调用它,在TextWatcher中设置文本时不会陷入无限循环
public void handleSpaceValidation(EditText editText, Editable editable) {
String s = editText.getText().toString();
int count = 0;
loop:
for (int i = 0; i < editable.length(); i++) {
if (editable.charAt(i) == ' ') {
count++;
if (count > 1) {
String after = s.trim().replaceAll(" +", " ");
editText.setText(after);
editText.setSelection(after.length());
break loop;
}
}
}
}
希望此帮助:) 编码愉快。
答案 3 :(得分:0)
我想我得到了一个干净的解决方案:
inputText.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void afterTextChanged(Editable s) {
int whiteSpaceCount = 0;
for (int i = 0; i < s.toString().length(); i++) {
if (Character.isWhitespace(s.charAt(i))) {
whiteSpaceCount++;
}
if (whiteSpaceCount > 1 && !Character.isLetter(s.charAt(i))) {
s.replace(i, i + 1, "");
}else if (!Character.isLetter(s.charAt(i)) && !Character.isWhitespace(s.charAt(i))) {
s.replace(i, i + 1, "");
}
}
}
});
希望对你有帮助,别忘了在最后显示之前修剪inputText,这样如果用户在开始或结束时输入空格,我们就可以修剪它。
答案 4 :(得分:-1)
数字没有那种类型的力量。您必须为EditText制作自定义过滤器。
答案 5 :(得分:-1)
我已经解决了我的问题,我必须在打字时只允许一个空格。
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
Log.e("BeforeText", String.valueOf(s));
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Log.e("OnText", String.valueOf(s));
//
}
@Override
public void afterTextChanged(Editable s) {
Log.e("AfterText", String.valueOf(s));
if(editText.getText().toString().length()>1)
{
if(editText.getText().toString()
.charAt(editText.getText().toString().length()-1)
==editText.getText().toString()
.charAt(editText.getText().toString().length()-2))
{
String value=editText.getText().toString().substring(0,
editText.getText().toString().length()-1);
editText.setText(value);
editText.setSelection(value.length());
}
}
}
});