Intereting Posts
(Android) Как показать часть изображения? ActionBar MenuItem Divider Как сделать изображение как можно большим, сохраняя соотношение сторон Задержка при использовании android.speech.SpeechRecognizer в DICTATION_MODE Android получить drawable, который устанавливает как drawabletop textview Предупреждение: компоновщик: app_process имеет перемещение текста. Это трата памяти и представляет угрозу безопасности. Пожалуйста исправьте. Разрешения запрещены Android Layout – заполнить остальную часть пространства, кроме Android: обнаружение экранной клавиатуры Pro Guard ошибка сборки релиз apk ViewPager с WebView, позволяющий прокручивать и запрещать прокрутку WebView Каков правильный способ применения Tap To Focus для камеры? Как отключить предварительную загрузку в viewpager? Что означает «| =»? (Равномерный оператор трубы) После обновления службы Google Play до версии 13 я получил сообщение об ошибке Android Studio – JAVA_HOME не указывает на действительную установку JVM

Как отключить emoji от ввода в Android EditText?

Большинство реализаций text inputType (кроме URI, пароля и т. Д.) Для EditText и TextView позволяют Emoji – хотя в большинстве конфигураций клавиатуры Google эта кнопка скрыта. Есть ли способ отключить Emoji от ввода в EditText? Есть ли параметр inputType, который может быть сопряжен с textMultiLine , который отключит Emoji?

Solutions Collecting From Web of "Как отключить emoji от ввода в Android EditText?"

Измените файл build.gradle , добавьте XEditText в свой проект:

 dependencies{ compile 'com.xw.repo:xedittext:2.0.0@aar' } 

После этого в вашем layout.xml :

 <com.xw.repo.XEditText xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" app:x_disableEmoji="true"/> 

Или:

Настройте EditText следующим образом:

 public class CustomEditText extends EditText { public CustomEditText(Context context) { super(context); init(); } public CustomEditText(Context context, AttributeSet attrs) { super(context, attrs); init(); } public CustomEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { setFilters(new InputFilter[]{new EmojiExcludeFilter()}); } private class EmojiExcludeFilter implements InputFilter { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { for (int i = start; i < end; i++) { int type = Character.getType(source.charAt(i)); if (type == Character.SURROGATE || type == Character.OTHER_SYMBOL) { return ""; } } return null; } } } 

Оба будут хорошо работать!

Существует сложный способ отключить emoji с клавиатуры.

Вам просто нужно установить

android:inputType="textEmailAddress"

Для EditText ..

  <EditText android:id="@+id/edt_note" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/note" android:inputType="textEmailAddress" android:padding="10dp" android:textColor="@color/white" /> 

Я не уверен, что он будет работать во всех случаях, но в моем случае это сработало для меня …

Нет ничего, что на 100% отключит эможи. Клавиатура может действовать в любом режиме, который она видит, каким бы способом она ни считалась, поэтому нет настроек, которые предотвратят эмози. Если вы должны предотвратить это, сделайте это белым или черным списком символов с помощью TextWatcher.

Вы можете написать фильтр ввода для символов «черный список / белый список»

 public static InputFilter getEditTextFilterEmoji() { return new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { CharSequence sourceOriginal = source; source = replaceEmoji(source); end = source.toString().length(); if (end == 0) return ""; //Return empty string if the input character is already removed if (! sourceOriginal.toString().equals(source.toString())) { char[] v = new char[end - start]; TextUtils.getChars(source, start, end, v, 0); String s = new String(v); if (source instanceof Spanned) { SpannableString sp = new SpannableString(s); TextUtils.copySpansFrom((Spanned) source, start, end, null, sp, 0); return sp; } else { return s; } } else { return null; // keep original } } private String replaceEmoji(CharSequence source) { String notAllowedCharactersRegex = "[^a-zA-Z0-9@#\\$%\\&\\-\\+\\(\\)\\*;:!\\?\\~`£\\{\\}\\[\\]=\\.,_/\\\\\\s'\\\"<>\\^\\|÷×]"; return source.toString() .replaceAll(notAllowedCharactersRegex, ""); } }; } 

Затем установите его как фильтры EditText;

 InputFilter[] filterArray = new InputFilter[] {getEditTextFilterEmoji()} editText.setFilters(filterArray); 

Код от @woxingxiao отлично работает, пока вы не укажете какой-либо inputType в вашем xml, например, android:inputType="textMultiLine" .

Я немного изменил его предложение, и я думаю, что он отлично работает.

 public class EmojiExcludeEditText extends EditText { public EmojiExcludeEditText(Context context) { super(context); init(); } public EmojiExcludeEditText(Context context, AttributeSet attrs) { super(context, attrs); init(); } public EmojiExcludeEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { setFilters(new InputFilter[]{emojiExcludeFilter}); } @Override public void setFilters(InputFilter[] filters) { if (filters.length != 0) { //if length == 0 it will here return when init() is called boolean add = true; for (InputFilter inputFilter : filters) { if (inputFilter == emojiExcludeFilter) { add = false; break; } } if (add) { filters = Arrays.copyOf(filters, filters.length + 1); filters[filters.length - 1] = emojiExcludeFilter; } } super.setFilters(filters); } private EmojiExcludeFilter emojiExcludeFilter = new EmojiExcludeFilter(); private class EmojiExcludeFilter implements InputFilter { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { for (int i = start; i < end; i++) { int type = Character.getType(source.charAt(i)); if (type == Character.SURROGATE || type == Character.OTHER_SYMBOL) { return ""; } } return null; } } } 

Другое решение:

MEtMessageText.setInputType ( InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS | InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);

В этом примере отображается кнопка ENTER

InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS эквивалентен android: inputType = " textEmailAddress " в XML-макете

Попробуйте android:inputtype="textUri|textMultiLine" .

В этом параметре клавиатура изменит кнопку голосового ввода на кнопку «/».