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("");

эту строку, поэтому в это время появляется сообщение об ошибке, но в это время пользователь все еще может ввести пробел. Но мне нужно, чтобы пользователь не мог ввести пробел.

Ответ 1

ее решение для меня:

android:digits="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"
android:inputType="textFilter"

Добавьте его в редактируемый текст в XML файле

Ответ 2

Почему бы вам не подумать о символьном фильтре. Вот пример фрагмента кода.

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

Ответ 3

Эта версия поддерживает ввод предложений с клавиатуры с помощью пробелов.

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() }
})

Ответ 4

Попробуйте это

Использовать android:digits не включать "" (пробел в нем)

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

Ответ 5

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 "";
    }
}
});

Ответ 6

В методе 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());
        }
    }

Ответ 7

Я попытался использовать решение InputFilter и не работает для меня, потому что если попытаться нажать клавишу Backspace, весь введенный текст удваивается в 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);
        }
    })

Ответ 8

Чтобы отключить использование пространства

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

Ответ 9

Просто замените это в коде, и он должен работать отлично,

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

Ответ 10

Простой и легкий способ сделать это:

Это удалит пробелы из текста при нажатии кнопки:

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

Вы можете использовать "string s" везде, где вам нужно.

Ответ 11

вместо 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());
}

Ответ 12

Попробуйте это, и это хорошо работает

Котлин:

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
        }
    })

Джава:

editText.setFilters(new InputFilter[]{(source, start, end, dest, dstart, dend) -> {
        if (end == 1) {
            if (Character.isWhitespace(source.charAt(0))) {
                return "";
            }
        }
        return null;
    }});