ros*_*ter 23 android space android-edittext
在我的Android应用程序中,我只需要禁用空格键.但我没有找到解决这个问题的方法.我需要禁用空格键,当用户输入空格不起作用时,特殊字符,字母,数字和所有其他应该工作.我试过的是,
etPass.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
String str = s.toString();
if(str.length() > 0 && str.contains(" "))
{
etPass.setError("Space is not allowed");
etPass.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
}
});
Run Code Online (Sandbox Code Playgroud)
但这里的问题是一旦空格全文删除.我删除了
etPass.setText("");
Run Code Online (Sandbox Code Playgroud)
这一行,所以当时显示错误信息,但那时用户仍然可以输入空格.但我需要的是用户不应该键入空格.
SAn*_*idD 48
她是我的解决方案:
android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"
android:inputType="textFilter"
Run Code Online (Sandbox Code Playgroud)
将其添加到xml文件中的编辑文本中
Don*_*pan 35
你为什么不考虑字符过滤器..这是一个示例代码片段.
/* To restrict Space Bar in Keyboard */
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.isWhitespace(source.charAt(i))) {
return "";
}
}
return null;
}
};
input.setFilters(new InputFilter[] { filter });
Run Code Online (Sandbox Code Playgroud)
Kev*_*tel 12
此版本支持键盘的空间建议输入.
InputFilter filter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
String filtered = "";
for (int i = start; i < end; i++) {
char character = source.charAt(i);
if (!Character.isWhitespace(character)) {
filtered += character;
}
}
return filtered;
}
};
input.setFilters(new InputFilter[] { filter });
Run Code Online (Sandbox Code Playgroud)
PS:Kotlin版本:
input.filters = arrayOf(InputFilter { source, _, _, _, _, _ ->
source.toString().filterNot { it.isWhitespace() }
})
Run Code Online (Sandbox Code Playgroud)
我找到了更好的解决方案,而不是使用数字或编写任何额外的代码,只需做这些事情......
tiePassword.filters = tiePassword.filters.let {
it + InputFilter { source, _, _, _, _, _ ->
source.filterNot { char -> char.isWhitespace() }
}
}
Run Code Online (Sandbox Code Playgroud)
它不会允许任何空间。尝试并享受...继续学习和分享
尝试这个
使用时 android:digits请勿在其中添加“”(空格)
<EditText
android:inputType="number"
android:digits="0123456789.abcdefghijklmnl....."// write character that you want to allow
/>
Run Code Online (Sandbox Code Playgroud)
EditText yourEditText = (EditText) findViewById(R.id.yourEditText);
yourEditText.setFilters(new InputFilter[] {
new InputFilter() {
@Override
public CharSequence filter(CharSequence cs, int start,
int end, Spanned spanned, int dStart, int dEnd) {
// TODO Auto-generated method stub
if(cs.equals("")){ // for backspace
return cs;
}
if(cs.toString().matches("[a-zA-Z]+")){ // here no space character
return cs;
}
return "";
}
}
});
Run Code Online (Sandbox Code Playgroud)
我尝试使用该InputFilter解决方案,但对我不起作用,因为如果尝试点击退格键,则整个输入的文本会在EditText.
该解决方案适用于我Kotlin使用TextWatcher:
editText.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { }
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { }
override fun afterTextChanged(p0: Editable?) {
val textEntered = editText.text.toString()
if (textEntered.isNotEmpty() && textEntered.contains(" ")) {
editText.setText(editText.text.toString().replace(" ", ""));
editText.setSelection(editText.text!!.length);
}
}})
Run Code Online (Sandbox Code Playgroud)
删除空格的扩展:
fun String.removeSpace() = trim().replace("\\s+".toRegex(), replacement = "")
Run Code Online (Sandbox Code Playgroud)
删除EditText输入空格:
val removeFilter = InputFilter { s, _, _, _, _, _ -> s.toString().removeSpace() }
editText.apply { filters = filters.plus(removeFilter) }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30076 次 |
| 最近记录: |