Подтвердить что ты не робот

Как ограничить ввод EditText некоторым специальным символом, таким как обратная косая черта (/), tild (~) и т.д. С помощью программной клавиатуры в программном обеспечении Android

Я разрабатываю приложение для клавиатуры, но у меня проблема. Я хочу ограничить/заблокировать специальный символ с мягкой клавиатуры в EditText в программном обеспечении Android.

Итак, можно ли каким-либо образом ограничить любой специальный ввод символов в тексте редактирования в android.

Если у кого есть идея, ответьте.

Спасибо заранее.

4b9b3361

Ответ 1

Попробуйте, это может сработать для вас.

public class MainActivity extends Activity {

    private EditText editText;
    private String blockCharacterSet = "~#^|$%&*!";

    private InputFilter filter = new InputFilter() {

        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

            if (source != null && blockCharacterSet.contains(("" + source))) {
                return "";
            }
            return null;
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText) findViewById(R.id.editText);
        editText.setFilters(new InputFilter[] { filter });
    }

}

Ответ 2

Это должно работать:

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.isLetterOrDigit(source.charAt(i))) { 
                                return ""; 
                        } 
                } 
                return null; 
        } 
}; 

edit.setFilters(new InputFilter[]{filter});

Или, если вы предпочитаете простой способ:

<EditText android:inputType="text" android:digits="0123456789*,qwertzuiopasdfghjklyxcvbnm" />

Ответ 3

Отметьте эту ссылку, которая показывает Как ограничить специальные символы из поля Android EditText?

Попробуйте этот код android:digits="abcde.....012345789" Я думаю, это самый простой способ сделать. Надеюсь, это поможет вам.

Ответ 4

Если вы хотите добавить пробелы, вы можете дать пробел после последней цифры.

  android:digits="0123456789qwertzuiopasdfghjklyxcvbnm "

Ответ 5

Поздно, но может быть полезно для других. Вместо программного, вы можете перейти с атрибутом xml. Возможно, в Single layout у вас есть много editText, из которых вы хотите ограничить специальные символы только одним EditText. Поэтому определение в xml поможет вам. Вот код для ограничения специальных символов, позволяя им вводить только алфавиты и цифры, как показано ниже

<EditText
     android:id="@+id/editText"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:textSize="@dimen/text10"
     android:singleLine="true"
     android:maxLines="1"
     android:maxLength="16"
     android:digits="abcdefghijklmnopqrstuvwxyz0123456789"/>

Ответ 6

Вы можете создать регулярное выражение и проверить его на методе onTextChanged

yourEditText.addTextChangedListener(new TextWatcher() {

          public void afterTextChanged(Editable s) {

            // you can call or do what you want with your EditText here
            yourEditText. ... 

          }

          public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

          public void onTextChanged(CharSequence s, int start, int before, int count) {}
       });

Ответ 7

Для тех, кто может столкнуться с проблемами при добавлении пространства, добавьте пробел со всеми алфавитами. Ниже приведен пример Также вы должны знать, что пользователь не сможет добавить новую строку в этом случае.

            <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="text"
            android:digits="0123456789,a bcdefghijklmnopqrstuvwxyz"
            android:maxLines="1"
            android:singleLine="true" />