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

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

Измените файл 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" .

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

Intereting Posts
Кнопка отключения Android DroidGap Используйте ADB, чтобы проверить, включен ли режим полета? API WooCommerce для мобильного приложения Как динамически изменять цвет фонового рисунка фонового рисунка Android registerOnSharedPreferenceChangeListener () вызывает сбой в пользовательском представлении Использование RoboFragment с помощью FragmentManager Как использовать adb с genymotion на mac? Слияние манифеста Android – Различные действия запуска из проекта библиотеки Как избежать щелчка по нижнему элементу html при нажатии на элемент html над ним на сенсорных устройствах? Служение, убитое при сохранении блокировки во время разговора и после вызова startForeground Поврежденные или отсутствующие векторные чертежи после запуска Proguard Могу ли я изменить style.xml для другого разрешения Предоставляет ли NDEV / Dragon Mobile SDK доступ в Интернет? Travis-ci build не работает с ShellCommandUnresponsiveException Добавьте галочку (✔) в string.xml