- Поле ввода числовых значений в Android
- Начнем с требований
- Анализ
- Реализация
- Отладка
- Бонус
- Google Клавиатура для Android: удобные функции и скрытые фишки
- Содержание
- Использование прописных букв
- Быстрая вставка символов
- Вставка дробных чисел
- Раскладка как на клавиатуре для ПК
- Команды для быстрой вставки слов или фраз
- Еще немного скрытых фишек
- Как сменить точки уведомлений на цифры в EMUI
- 59 комментариев
Поле ввода числовых значений в Android
Начнем с требований
Анализ
Из всего спектра элементов управления в Android нас интересует виджет EditText .
Обратимся к документации и посмотрим, что нам предлагает Android SDK.
EditText наследуется от TextView , который, в свою очередь, обладает свойствами:
XML-разметка
digits – позволяет установить набор специальных символов, которые может принимать поле и автоматически включает режим ввода чисел.
numeric – задает обработчик ввода чисел.
inputType – с помощью набора константных значений позволяет сгенерировать требуемый обработчик ввода.
Публичные методы класса
setFilters – позволяет задать набор фильтров, которые будут применяться при вводе значений в поле.
digits , numeric и inputType позволяют ограничить набор вводимых символов, но никак не влияют на точность числа, а вот setFilters , как раз то, что нам нужно.
Реализация
Перед созданием собственного фильтра, сделаем так, чтобы в поле можно было вводить только числа и десятичный разделитель.
Теперь зададим собственный фильтр для поля ввода, чтобы принимать только значения соответствующие заданной точности.
Нам потребуется реализовать интерфейс InputFilter , а конкретно переопределить метод filter .
Согласно документации, этот метод вызывается при замене значения в поле ввода (dest) в диапазоне от dstart до dend на текст из буфера (source) в диапазоне от start до end.
Метод возвращает объект класса CharSequence , который будет установлен в поле ввода взамен текущему значению. Если заменять значение поля ввода не требуется, то в методе следует вернуть null .
В конструктор нашего фильтра будем передавать количество символов до и после десятичного разделителя.
Переопределяем метод filter . Алгоритм проверки вводимых значений следующий:
- До помещения буферного значения в поле ввода мы будем вставлять это значение в некоторую переменную.
- Если полученное значение удовлетворяет нашим требованиям точности, то мы разрешаем ввод, вернув null .
- В противном случае возвращаем пустую строку, тем самым отказываясь от вводимого значения.
Формируем будущее значение после ввода пользователя:
Для удобства манипуляция со строкой, создадим экземпляр класса StringBuilder на основе исходного значения поля ввода и произведем необходимые замены с учетом вводимого значения.
В результате в переменной newText будет содержаться будущее значения текстового поля.
Теперь нам следует проверить корректность нового значения.
Оно должно удовлетворять следующим условиям:
- Количество десятичных разделителей не должно превышать 1.
123, 123.45 — верно, 12.3.4 — неверно. - Количество символов целой и дробной частей числа должно удовлетворять заданной точности.
Проверим количество разделителей, для этого мы переберем все символы результирующей строки.
Если найдется десятичный разделитель, то запомним его индекс. В случае повторного нахождения разделителя, ввод считается некорректным и цикл останавливается.
В завершении возвращаем результат.
Если ввод корректный, то возвращаем null , тем самым принимая вводимые значения,
в противном случае возвращаем пустую строку, чтобы не передавать в поле ввода значения.
Отладка
Видим, что приложение корректно обрабатывает целую и дробную части числа, запрещает вводить несколько десятичных разделителей.
Однако наблюдается интересная ситуация, если удалить десятичный разделитель, то мы выходим за границы точности.
Об этом упоминается в документации
Be careful to not to reject 0-length replacements, as this is what happens when you delete text.
Нужно быть осторожным с заменами нулевой длины, как это происходит при удалении текста.
Что же произошло на самом деле?
Наш алгоритм отработал корректно и в условии проверки длины целой части числа выявил, что допустимая точность нарушена и вернул пустую строку. Но само действие удаления символов было применено к исходному значению поля ввода.
Решим эту проблему следующим образом — выявим факт удаления символов. Документация подсказывает, что в этом случае происходит замена с нулевой длиной. Выделим из исходного значения поля ввода удаляемые символы и вернем их в качестве результата нашего метода, тем самым откажемся от удаления.
Нам потребуется изменить блок кода, где возвращается результат
Таким образом контрольный пример выполнен, заданная точность достигнута.
Библиотека успешно используется в продакшене.
Подключить её можно с помощью Gradle
Бонус
Часто бывает необходимым запретить отображение системной клавиатуры для поля ввода.
Например, если используется клавиатура из приложения.
На помощь приходит метод класса EditText, появившийся в Android версии 21 и выше:
setShowSoftInputOnFocus(boolean show)
Вообще-то, этот метод был и в ранних версиях, но был приватным.
public void showSoftInputOnFocusCompat(boolean isShow) <
<>
Источник
Google Клавиатура для Android: удобные функции и скрытые фишки
Многие пользуются официальной клавиатурой от компании Google для Android, но немногие знают об интересных и полезных фишках этого приложения. Мы решили собрать в одной статье скрытые возможности клавиатуры Google. Многие из них помогут вам набирать текст быстрее, ведь на мобильном устройстве с сенсорным экраном это очень важно.
Содержание
Использование прописных букв
Одно слово или целое предложение, написанные строчными буквами, можно быстро перевести в прописной регистр — достаточно выделить их и нажать на аналог Shift’а.
Разработчики из Google улучшили концепцию непрерывного ввода и добавили несколько удобных жестов. Чтобы быстро вставить букву в прописном формате, не нужно переключать Shift каждый раз — достаточно тапнуть на него, удерживать и вести к нужной букве. После вставки буквы Shift отключается.
Быстрая вставка символов
Чтобы каждый раз не переключаться на вкладку символов для вставки цифры или чего-то другого, достаточно тапнуть по кнопке переключения, удерживать и вести палец к нужному При этом после вставки раскладка сразу же переключится на буквенную.
Вставка дробных чисел
На вкладке с символами большинство цифр по долгому нажатию на них предлагают вставку дробей с ними в роли числителя или знаменателя. А на нуле есть крутой символ — пустое множество. О других скрытых символах на цифровой вкладке читайте ниже.
Раскладка как на клавиатуре для ПК
В клавиатуре Google для Android можно включить раскладку, которая характерна типичным клавиатурам для компьютеров, но работает она только на английском. Не расстраивайтесь — ее можно использовать как альтернативную английскую, что определенно удобно, ведь у такой раскладки есть строка с цифрами и дополнительные символы.
Чтобы включить ПК-раскладку в клавиатуре Google, переходим в ее настройки → Вид и раскладки → Персонализированные стили. Там добавляем новый стиль, где в разделе «Раскладка» выбираем PC, а язык любой необходимый вам.
После добавления стиля приложение сразу же предложит его активировать в настройках. Находим ее в списке и активируем. После этого на новую раскладку можно переключиться кнопкой с глобусом на клавиатуре.
Команды для быстрой вставки слов или фраз
Одна из самых удобных функций клавиатуры Google — это создание команд для быстрой вставки любых слов или даже длинных фраз и предложений. Чтобы создать такие команды, заходим в настройки приложения → Исправление текста → Пользовательский словарь → Для всех языков.
Нажимаем кнопку «Добавить» в верхнем правом углу. Вводит нужное вам слово или фразу, а также короткую команду, которая будет с ними ассоциироваться. Например, tb — Trashbox, кд — Как дела? При вводе команды «кд» на клавиатура в поле рекомендуемых слов предложит «Как дела?». Таким образом можно ввести целую фразу тремя нажатиями.
Еще немного скрытых фишек
Среди интересных шорткатов и скрытых «фишек» клавиатуры Google также стоит отметить:
- Долгое нажатие на точку — меню с часто используемыми символами.
- Долгое нажатие на запятую быстрый переход к настройкам.
- Долгое нажатие на пробел — переключение между клавиатурами.
На вкладке с цифрами есть много скрытых символов, которые вызываются долгим тапом:
- Доллар — альтернативные знаки валют.
- Звездочка — кресты и более красивая версия звездочки.
- Плюс — плюс-минус.
- Дефис — длинные тире, короткое тире, нижнее подчеркивание и точка на середине строки.
- Долгий тап по знакам вопроса и восклицания — эти же символы в перевернутом виде.
- Жирная точка — карточные знаки.
Надеемся, что эти маленькие «фишечки» и скрытые функции помогут вам быстрее набирать текст на клавиатуре Google.
Источник
Как сменить точки уведомлений на цифры в EMUI
Если Вы обладатель смартфона от компании Huawei или Honor, то у Вас установлена прошивка EMUI. Начиная с Android версии 8.0 Google ввела точки уведомлений. Но если Вам больше нравится видеть количество непрочитанных сообщений цифрой, то есть простой способ включить классический вид.
Для начала откройте рабочий стол и сведите два пальца, чтобы открыть управление рабочими столами.
В появившейся панели действий внизу нажмите на опцию «Настройки».
В данном меню есть несколько полезных настроек, но нам интересен пункт «Метки на значках приложений». Нажмите на него.
В это разделе можно выбрать режим меток. Нажмите на пункт «Режим меток».
На самом деле их всего два: «Новые сообщения» и «Новые уведомления», причем в первом случае будет отображаться количество непрочитанных сообщений в приложений, а во втором будет та самая точка уведомления, сигнализирующая о том, что есть непрочитанные уведомления. Для показа цифр выберите «Новые сообщения».
Если Вам по каким-либо причинам не нужно, чтобы на иконке приложений была метка уведомления или количество непрочитанных сообщений, то Вы можете отключить их для конкретного приложения, указанного в списке, просто сдвиньте переключатель в положение «Выключено».
59 комментариев
Рады, что смогли Вас помочь))
Спасибо большое, пол часа искал, как это сделать… При чем пишут всё не то.
В режиме новые сообщения не все приложения отображаются. Или можно как-то добавлять?
К сожалению, вручную добавить туда приложения нельзя
Подскажите, как тогда добавить приложение в режим новое сообщение. Спасибо.
а какое приложение там не отображается?)
У меня не отображается Mail.ru
А в этом списке Mail.ru отображается?
Нет. Именно в новых сообщениях mail.ru нет, а если поставить новые уведомления то он есть и высвечивается кружком без цифрового счётчика на иконке
Значит так работает приложении Mail.ru, раз его нет в списке на скриншоте. Похоже придется выбирать, что важнее, цифры и кружки с уведомлениями)
А чтобы было не 99+, а больше, как?
Стандартными средствами никак, это особенность прошивки)
А как не стандартными?
а почему стандартными средствами не нравится?)
к примеру, твиттер.
ещё в начале года значки были, но пришлось удалить. скачала заново и всё, значки пропали и само приложение из списка тоже. это проблема в самом твиттере или стоит покопаться в телефоне?
Дело в приложении, проверил на своем телефоне)
Большое спасибо! Помогло, у меня Huawei Y6 Prrime 2018. Точка просто раздражала, слава Богу с вашей помощью всё сделал.
а на телефоне OnePlus 5 Android 9 как?
А у Вас чистый андроид?
Здравствуйте. Хуавей п20 про, куплен месяца полтора назад. Хочу, чтобы показывал знак уведомления на иконках, и…ничего. А вот знак сообщения показывает. Но не для всех приложений, мейл, например, не показывает, и смс. Причем, еще три дня назад все было нормально с метками уведомлений, и вдруг все пропало.
Еще на значке вайбер метка уведомления не появлялась для тех переписок, в которых было отключено оповещение, а появлялись только разрешенные, что меня полностью устраивало. Сообщения показывает абсолютно для всех переписок. Что это может быть, глюк какой то? Все делаю правильно, все включено как надо, перерыла все, что можно.
Надеюсь, понятно написала…))
Спасибо.
А перед тем как все стало работать не как раньше, обновления системы не устанавливались?
Он спросил установить обновление, которое будет показывать подсказки на экране. Согласилась. После этого еще несколько дней, как мне сейчас кажется по памяти, изменений не было . Может, не заметила сразу. Если честно, то и подсказок никаких не заметила.
Когда покупали в декабре, конс предупредил, что стоит 9 андроид, сразу попросит обновится до какого то там еще. Вот до этого обновления тоже непонятки были с метками. Обновился — все нашлось и работало.
Все это после айфона не очень приятно. Был 4 и 5, долго с ними ходила, решилась, и вот…((
Добрый день!как то решили проблему что не на всех приложениях отображаться метк?
Источник