web-dev-qa-db-ja.com

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

            }
        });

しかし、ここでの問題は、スペースが来るとテキスト全体が削除されることです。私は削除しました

etPass.setText("");

この行はエラーメッセージを表示していますが、その時点でもユーザーはスペースを入力できます。しかし、ユーザーがスペースを入力できないようにする必要があります。

20
roshanpeter

彼女は私のための解決策です:

Android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"
Android:inputType="textFilter"

XMLファイルの編集テキストに追加します

42
SAndroidD

文字フィルターについて考えてみませんか..これがサンプルコードスニペットです。

/* 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 });
34
Don Chakkappan

このバージョンは、スペースを含むキーボードの提案からの入力をサポートします。

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() }
})
12
Kevin Robatel

これを試して

つかいます Android:digits「」を含めない(スペース)

<EditText
    Android:inputType="number"
    Android:digits="0123456789.abcdefghijklmnl....."// write character that you want to allow
/>
5
N J

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());
        }
    }
4
Moti
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 "";
    }
}
});
4
johnrao07

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);
        }
    })
3
pableiros

コード内でこれを置き換えるだけで、完全に機能するはずです。

etPass.setText(etPass.getText().toString().replaceAll(" ",""));
1
Madhur

簡単で簡単な方法は次のとおりです。

これにより、ボタンのクリック時にテキストからスペースが削除されます。

String s = etPass.getText().toString().replaceAll(" ","");

string s "必要な場所に。

1
RAHUL_27

スペースの使用を無効にするには

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (editclicked) {
        if (keyCode == KeyEvent.KEYCODE_SPACE) {
            return false
        }
    } else {
        super.onKeyDown(keyCode, event);
    }
}
1
Sunny

これを試してみるとうまくいきます

コトリン:

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;
    }});
0
Shyam Kumar

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());
}
0
Ravi Rupareliya