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
}
});
しかし、ここでの問題は、スペースが来るとテキスト全体が削除されることです。私は削除しました
etPass.setText("");
この行はエラーメッセージを表示していますが、その時点でもユーザーはスペースを入力できます。しかし、ユーザーがスペースを入力できないようにする必要があります。
彼女は私のための解決策です:
Android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"
Android:inputType="textFilter"
XMLファイルの編集テキストに追加します
文字フィルターについて考えてみませんか..これがサンプルコードスニペットです。
/* 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 });
このバージョンは、スペースを含むキーボードの提案からの入力をサポートします。
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 });
PS:Kotlinバージョン:
input.filters = arrayOf(InputFilter { source, _, _, _, _, _ ->
source.toString().filterNot { it.isWhitespace() }
})
これを試して
つかいます Android:digits
「」を含めない(スペース)
<EditText
Android:inputType="number"
Android:digits="0123456789.abcdefghijklmnl....."// write character that you want to allow
/>
AfterTextChangedメソッドに次のコードを追加します。
public void afterTextChanged(Editable s) {
String str = etPass.getText().toString();
if(str.length() > 0 && str.contains(" "))
{
etPass.setText(etPass.getText().toString().replaceAll(" ",""));
etPass.setSelection(etPass.getText().length());
}
}
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 "";
}
}
});
InputFilter
ソリューションを使用しようとしましたが、機能しません。バックスペースをタップしようとすると、入力したテキスト全体がEditText
で2倍になります。
このソリューションは、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);
}
})
コード内でこれを置き換えるだけで、完全に機能するはずです。
etPass.setText(etPass.getText().toString().replaceAll(" ",""));
簡単で簡単な方法は次のとおりです。
これにより、ボタンのクリック時にテキストからスペースが削除されます。
String s = etPass.getText().toString().replaceAll(" ","");
「string s
"必要な場所に。
スペースの使用を無効にするには
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (editclicked) {
if (keyCode == KeyEvent.KEYCODE_SPACE) {
return false
}
} else {
super.onKeyDown(keyCode, event);
}
}
これを試してみるとうまくいきます
コトリン:
editText.filters = arrayOf(object : InputFilter {
override fun filter(source: CharSequence?, start: Int, end: Int, dest: Spanned?, dstart: Int, dend: Int): CharSequence? {
// eliminates single space
if (end == 1) {
if (Character.isWhitespace(source?.get(0)!!)) {
return ""
}
}
return null
}
})
Java:
editText.setFilters(new InputFilter[]{(source, start, end, dest, dstart, dend) -> {
if (end == 1) {
if (Character.isWhitespace(source.charAt(0))) {
return "";
}
}
return null;
}});
etPass.setText("");
の代わりに、EditText
データからスペースを削除します。
etPass.setText(etPass.getText().toString().trim());
etPass.setSelection(autoComplete.getText().length());
したがって、IF
条件は次のようになります。
if(str.length() > 0 && str.contains(" "))
{
etPass.setError("Space is not allowed");
etPass.setText(etPass.getText().toString().trim());
etPass.setSelection(etPass.getText().length());
}