Edittext android studio как получить значение

Обновлено: 18.05.2024

Из всего спектра элементов управления в Android нас интересует виджет EditText .
Обратимся к документации и посмотрим, что нам предлагает Android SDK.

EditText наследуется от TextView , который, в свою очередь, обладает свойствами:
XML-разметка
digits – позволяет установить набор специальных символов, которые может принимать поле и автоматически включает режим ввода чисел.
numeric – задает обработчик ввода чисел.
inputType – с помощью набора константных значений позволяет сгенерировать требуемый обработчик ввода.

Публичные методы класса
setFilters – позволяет задать набор фильтров, которые будут применяться при вводе значений в поле.

digits , numeric и inputType позволяют ограничить набор вводимых символов, но никак не влияют на точность числа, а вот setFilters , как раз то, что нам нужно.

Реализация

Перед созданием собственного фильтра, сделаем так, чтобы в поле можно было вводить только числа и десятичный разделитель.

Теперь зададим собственный фильтр для поля ввода, чтобы принимать только значения соответствующие заданной точности.
Нам потребуется реализовать интерфейс InputFilter , а конкретно переопределить метод filter .

Согласно документации, этот метод вызывается при замене значения в поле ввода (dest) в диапазоне от dstart до dend на текст из буфера (source) в диапазоне от start до end.

Поле ввода содержит 123456 (dest), курсор находится в 1[23]456 (dstart = 1, dend = 3), из буфера вставляется значение 789 (source = 789, start = 0, end 3).

Метод возвращает объект класса CharSequence , который будет установлен в поле ввода взамен текущему значению. Если заменять значение поля ввода не требуется, то в методе следует вернуть null .

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

  1. До помещения буферного значения в поле ввода мы будем вставлять это значение в некоторую переменную.
  2. Если полученное значение удовлетворяет нашим требованиям точности, то мы разрешаем ввод, вернув null .
  3. В противном случае возвращаем пустую строку, тем самым отказываясь от вводимого значения.

В результате в переменной newText будет содержаться будущее значения текстового поля.

  1. Количество десятичных разделителей не должно превышать 1.
    123, 123.45 — верно, 12.3.4 — неверно.
  2. Количество символов целой и дробной частей числа должно удовлетворять заданной точности.

Проверим корректность самого числа. Нам уже известен индекс десятичного разделителя, либо он отсутствует.
Остается только сравнить длину всего числа относительно индекса разделителя.

В завершении возвращаем результат.
Если ввод корректный, то возвращаем null , тем самым принимая вводимые значения,
в противном случае возвращаем пустую строку, чтобы не передавать в поле ввода значения.

Отладка


Запускаем проект и вводим наш контрольный пример, пытаясь выйти за его границы.
В качестве контрольного примера будем использовать число 123.45. Нельзя вводить число более 999.99 и менее 0.01.

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

Об этом упоминается в документации

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)


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

1- Android EditText

В Android, EditText это подкласс у TextView поэтому он наследует все функции TextView, помимо этого, он имеет новые функции позволяющие пользователю ввести или изменить текст с разными целями, поэтому вам нужно определить вид данных, которые можно принять через атрибут android:inputType.


Создайте EditText с Java ​​​​​​​кодом:

2- android:inputType

Атрибут android:inputType определяет вид данных, который EditText может принять, в то же время предлагает Android поддержать пользователя, когда он/она воодит данные, например отобразить подходящую виртуальную клавишу для вида данных EditText. Но он не гарантирует, что пользователь введет правильный вид данных, поэтому вам еще нужны некоторые дополнительные манипуляции.

Распространенные значения android:inputType:

Type Description
textUri Allow to enter a URI.
textEmailAddress Allow to enter an Email address.
textPersonName Allow to enter the name of a person
textPassword Allow to enter a password, users only see the asterisk characters (*) (or similar).
textVisiblePassword Allow enter a password, and the user can read its contents.
number For entering numeric data.
phone For entering a phone number
date For entering a date
time For entering a time
textMultiLine Allows entering text data on multiple lines.

Вы можете сочетать много значений, чтобы создать новое значение для android:inputType, значения разделены знаком ( | ).

Разрешить ввести пароль, пользователь увидит только символы звездочек ( * ) (Или тому подобное).

Разрешить пользователю ввести пароль, содержащий только числовые символы.

EditText принимает все виды данных чистого текста (plain text).

Атрибут android:inputType="textMultiLine" позволяет EditText отобразить текст на нескольких строках, вам так же нужно сочетать его с атрибутом android.gravity="left|top" чтобы настроить отображение текста в верхнем левом углу.

Разрешить пользователю ввести числовые данные, в то же время поддерживать виртуальную клавиатуру для числовых входных данных.

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

Java код проверяет действителен ли введенный email пользователя:

С целью введения пользователем данные Date, виртуальная клавиатура имеет подходящий лэйаут для такого вида данных.

Примечание: С android:inputType="date" пользователь все еще может ввести недействительные данные Date с вашей подсказкой (hint). Поэтому, если вы хотите удостовериться в точности введения пользователем подходящих данных с определенным форматом Date, например"dd-MM-yyyy" (день - месяц - год) вы должны сочетать EditText и TextWatcher.

3- EditText Attributes

В основном, почти все атрибуты EditText унаследованы от TextView:

Атрибут android:hint используется для отображения текста подсказки для пользователя, когда текст EditText пустой.


Определите максимальное количество символов текста.

Данный атрибут больше не используется в EditText. Если вы не хотите, чтобы пользователь менял содержание текста EditText использователь одно из следующих решений:

Вы можете получить одинаковый результат с Java ​​​​​​​кодом:

4- EditText Methods

Помимо унаследованных методов от TextView, EditText так же имеет некоторые свои методы:

  • void selectAll()
  • void setSelection(int start, int stop) .
  • void setSelection(int index)
  • void extendSelection(int index)

Выбрать подтекст от start до stop. Индекс начинается с 0, 1, 2.

Переместить курсор (cursor) в позицию имеющую индекс "index".

Выбрать подтекст из настоящего положения курсора (cursor) к позиции с индексом "index".

Примечание: Вы можете посмотреть пример использования данных методов в конце статьи.

5- Ví dụ EditText

В этом примере, я покажу вам как использовать методы selectAll(), extendSelection(), setSelection() у EditText. И это изображение предварительного просмотра примера:

Очень сложно представить себе аппликацию, которая не требовала бы от пользователя, на каком-нибудь этапе, ввода данных. Для человека, который занимается программированием, тем более — разработкой аппликаций, необходимость в элементах, компонентах для ввода данных пользователем является настолько очевидным фактом, что я просто не вижу совершенно никакой необходимости в том, чтобы объяснять и обосновывать, для чего нужны такие элементы. Именно поэтому сразу перейдем к обсуждению и изучению этих элементов.

Создайте аппликацию, которая принимает от пользователя данные: имя пользователя и год его рождения, после чего сообщает пользователю его возраст. В случае ввода нелогичных данных, аппликация должна сообщать об этом пользователю. Аппликация будет называться Userlnfo001. Прежде всего создаем новую аппликацию, указываем ее имя в соответствии с заданием и выбираем для главной (и, по-прежнему, единственной) активности имя Main.

Теперь примем следующие решения по дизайну активности:

Элементы типа «поле ввода данных» располагаются в категории Text на панели элементов (компонентов), Palette:
Обратите внимание, что есть полтора десятка разновидностей этого типа элементов! Мы сделаем следующий выбор: первое поле (для имени) выбе­рем подтипа Plain Text, а второе поле, для ввода года рождения, выберем подтипа Number. Компоненты типа «наклейка» и «кнопка» находятся в категории Widgets (TextView и Button).

EditText - ввод данных

Только первым делом следует сменить тип панели и установить для сме­ненного типа два дополнительных свойства, ориентацию (вертикально) и «центр тяжести» (по центру экрана):

EditText - ввод данных

Теперь добавим элементы в соответствии с макетом и договоренности о типах элементов.
Получится вот такое «дерево компонентов»:

Если у вас идентификаторы, которые Android Studio автоматически при­своила элементам, другие — не обращайте на это никакого внимания, мы все равно будем их менять на «осмысленные». Выберем следующие:

Вместе с заменой идентификаторов, будет правильно заменить и тексты, которые с самого начала будут показаны (или не показаны) на компонентах.

Можно воспользоваться способом, использованным в предыдущей аппли­кации: напрямую заменить тексты в свойствах элементов. Но мы сделаем это способом, который считается (и по праву является!) более профессиональным: создадим глобальные значения, которые можно будет в даль­нейшем, при желании и необходимости, использовать в любых активно­стях аппликации. Способ этот более длинный, но я рекомендую приучаться к использованию именно его.

EditText - ввод данных

В папке res, в подпапке values, откройте файл strings.xml, и внесите в него три новых значения:

EditText - ввод данных

После добавления наших двух параметров мы можем в xml-файле актив­ности указать в соответствующем свойстве, что следует использовать именно эти параметры, (в двух элементах типа «наклейка» и «кнопка»).

В чем, собственно, удобство именно такого способа размещения надписи на элементах? В том, что если ще-то в будущих активностях этой же аппликации мы решим использовать эти надписи, то нам не придется снова набирать их, достаточно будет указать, что надо использовать соответствующие па­раметры из файла staring.xml, который является общим для всех активно­стей аппликации, сколько бы их ни было. Кроме того, в будущем мы смо­жем использовать эти же параметры и в файлах java, а это еще одно пре­имущество такого способа использования строковых значений.

Можно ли при этом продолжать использовать тот способ, которым мы вос­пользовались в предыдущей аппликации, то есть вписывать тексты (стро­ковые значения) напрямую и непосредственно в xml-файл, без их фикса­ции в общем файле strings.xml? Ответ прост: да, конечно. Все зависит от ваших намерений, от привычек работы, от необходимости использовать строковые значения в будущем или от решения не делать этого.

Запустим нашу аппликацию на исполнение. Кстати, а зачем это делать, если, фактически, мы еще ни чего особенного и полезного в ней и не сде­лали, и даже с дизайном только-только начали работать? Не рано ли?

Ни в коем случае не рано: следует сделать это даже обязательной привычкой! Надо запускать аппликацию после каждого, даже не очень существенного изменения в ней. Это нужно, чтобы убедиться: даже после внесенных изменений аппликация запускается.

Рекомендую также установить цвет фона экрана (фон панели-контейнера) и цвет фона в элементах «окно ввода данных» (в большинстве случаев для них рекомендуется использовать белый фон).

Разработка приложений для Android (41) --- EditText (поле ввода) подробно

EditText (поле ввода) подробно

1. Установите текст приглашения по умолчанию

Как показано на рисунке ниже, я считаю, что вы знакомы с этим интерфейсом входа в систему, верно? Мы используем этот интерфейс много раз.


По сравнению с другим, как насчет следующего?


Неплохо, правда? Конечно, я не буду публиковать здесь макет. Здесь мы представляем только два управляющих атрибута текста приглашения по умолчанию:

Два атрибута текста приглашения по умолчанию следующие:

Первый устанавливает содержание текста подсказки, второй устанавливает цвет текста подсказки!

2. После получения фокуса выделите все текстовое содержимое в компоненте.

Когда мы хотим получить фокус после щелчка по полю ввода, мы не перемещаем курсор в начало или конец текста; вместо этого мы получаем все текстовое содержимое в поле ввода! На этот раз мы можем использоватьselectAllOnFocusАтрибуты

Например, следующие визуализации: первая - для установки атрибута, вторая - для того, чтобы не устанавливать атрибут, после того, как EditText, установленный на true, получает фокус, весь текст выделяется!

3. Ограничьте тип ввода EditText.

Иногда нам может потребоваться ограничить вводимые данные. Например, при вводе номера телефона вы вводите строку букв, которая, очевидно, не соответствует нашим ожиданиям, а ограничение типа ввода может быть достигнуто с помощью атрибута inputType!

Например, ограничениями могут быть только номера телефонов, пароли (textPassword):

Необязательные параметры следующие:

Тип текста, в основном прописные, строчные и цифровые символы

Числовой тип

4. Установите минимальную строку, максимальную строку, одну строку, несколько строк, автоматический перенос строк.

EditText по умолчанию отображается в нескольких строках и может автоматически переноситься, то есть, когда одна строка не завершена, она автоматически переключается на вторую строку


Мы можем ограничить его, например
Установите минимальное количество строк:android:minLines="3"
Или установите максимальное количество строк EditText:android:maxLines="3"
PS: когда вводимое содержимое превышает maxline, текст автоматически прокручивается вверх! !

Кроме того, во многих случаях нам может потребоваться ограничить EditText, чтобы разрешить только однострочный ввод без прокрутки. Например, в приведенном выше примере интерфейса входа в систему нам нужно только установить

Может реализовать однострочный ввод без разрыва строки

5. Задайте интервал текста, установите тип прописных букв английского алфавита.

Мы можем установить интервал между словами с помощью следующих двух свойств:

Кроме того, EditText также предоставляет нам атрибуты для установки типа заглавных букв английских букв:android:capitalizeПо умолчанию нет, и предоставляются три дополнительных значения:

  • sentences:Используйте только первую букву
  • words:Размер первой буквы каждого слова, используйте пробелы, чтобы различать слова
  • characters:Каждая английская буква заглавная

6. Управляйте расстоянием вокруг EditText и расстоянием между внутренним текстом и рамкой.

Мы используемmarginСвязанные атрибуты увеличивают расстояние компонента относительно других элементов управления, например android: marginTop = "5dp".paddingУвеличьте расстояние между текстом в компоненте и границей компонента, например android: paddingTop = "5dp"

7. Установите EditText, чтобы получить фокус, и одновременно появится небольшая клавиатура.

Что касается проблемы с фокусом EditText и появлением клавиатуры, автор на некоторое время был запутан в последнем проекте. Требование: после входа в Activity, позвольте EditText получить фокус, и одновременно с этим появится клавиатура для ввода пользователем! Я перепробовал множество способов в Интернете, но не знаю, из-за ли это системы 5.1, которую использует автор! Вот краткое изложение:

Во-первых, позволить EditText получить фокус и очистить фокус

edit.requestFocus(); // Запрос на получение фокуса
edit.clearFocus(); // Очистить фокус

После фокусировки появляется маленькая клавиатура. Я трачу на это большую часть времени:

  • Нижняя версия системы напрямую requestFocus автоматически откроет маленькую клавиатуру
  • Немного более высокая версия требует, чтобы мы вручную играли на клавиатуре: Первый тип:

Я не знаю, почему, эти два метода не привели к появлению маленькой клавиатуры, автор наконец использовал:windowSoftInputModeАтрибут решает проблему всплывающей клавиатуры, вот, чтобы поделиться с вами:

android:windowSoftInputModeРежим взаимодействия между главным окном Activity и мягкой клавиатурой можно использовать, чтобы избежать проблемы перекрытия панели методов ввода, новой функции после Android 1.5.
Этот атрибут может влиять на две вещи:
[1] При создании фокуса вне зависимости от того, скрыта или отображается программная клавиатура
[2] Следует ли уменьшить размер активного главного окна, чтобы освободить место для виртуальной клавиатуры.

Простой момент - это управление клавиатурой, когда есть фокус, и нужно ли уменьшать размер окна Act, чтобы поместить небольшую клавиатуру
На выбор доступны следующие значения, можно задать несколько значений, разделенных знаком "|"
stateUnspecified: Состояние виртуальной клавиатуры не указано, система выберет соответствующее состояние или настройки в зависимости от темы
stateUnchanged: Когда появляется это действие, виртуальная клавиатура всегда будет оставаться в состоянии предыдущего действия, независимо от того, скрыта она или отображается
stateHidden: Когда пользователь выбирает действие, мягкая клавиатура всегда скрыта
stateAlwaysHidden: Когда основное окно Activity получает фокус, мягкая клавиатура всегда скрыта
stateVisible: Программная клавиатура обычно видна
stateAlwaysVisible: Когда пользователь выбирает действие, всегда отображается программная клавиатура
adjustUnspecified: Настройка по умолчанию, обычно система решает, скрыть или показать
adjustResize: Activity всегда регулирует размер экрана, чтобы оставить место для мягкой клавиатуры.
adjustPan: Содержимое текущего окна будет автоматически перемещаться так, чтобы текущий фокус никогда не перекрывался клавиатурой, и пользователь всегда мог видеть часть ввода.

Мы можем установить это свойство в AndroidManifest.xml для действия, которое должно вызывать всплывающую клавиатуру, например:


Тогда requestFocus () в объекте EditText в порядке

8. Управление положением курсора EditText.


Иногда нам может потребоваться управлять курсором в EditText, чтобы переместиться в указанную позицию или выбрать текст!
EditText предоставляет намsetSelection() метод имеет две формы:


Один параметр предназначен для установки позиции курсора, а два параметра предназначены для установки средней скобки между начальной и конечной позицией, то есть частичный выбор!
Конечно, мы также можем вызватьsetSelectAllOnFocus(true); Выделите весь текст, когда EditText получит фокус!
Кроме того, мы также можем вызватьsetCursorVisible(false); Установите курсор так, чтобы он не отображался
также может вызывать getSelectionStart()с участиемgetSelectionEndПолучить переднюю и заднюю позицию текущего курсора

9. Простая реализация EditText с помощью смайлов.

Я считаю, что все знакомы с QQ или WeChat. Когда мы отправляем текст, мы можем отправлять его вместе со смайликами. Есть два простых способа добиться этого:

1. Используйте SpannableString для достижения
2. Используйте класс Html для достижения
Здесь автор использует первый. Вот только простой эффект. Вы можете извлечь метод и настроить EditText;
Вы также можете написать поле ввода с несколькими смайликами, например QQ!

Посмотрите на изображения (нажмите, чтобы добавить смайлики, чтобы завершить добавление смайлов):


Код тоже очень простой:

PS: Кстати, не забудьте поставить картинку

10. EditText с кнопкой удаления

Мы часто видим в интерфейсе ввода приложения:



Когда мы вводим содержимое, справа появляется такой маленький крестик. После того, как мы щелкнем по нему, содержимое в поле ввода будет очищено!
на самом деле очень просто реализовать:
Установите addTextChangedListener для EditText, затем перепишите абстрактный метод в TextWatcher (), который используется для отслеживания изменений в поле ввода; затем установитеCompoundDrawablesWithIntrinsicBounds, чтобы установить изображение маленького креста; наконец, перепишите метод onTouchEvent , Если область щелчка - это положение маленького крестика, очистите текст!

Код реализации следующий:

Резюме этого раздела:

В этом разделе вы познакомитесь с элементом управления EditText (поле ввода) в элементе управления Android UI. Есть много способов его использования. Конечно, описанная выше ситуация определенно не будет соответствовать реальным потребностям. В реальной разработке нам может потребоваться настроить EditText в соответствии с нашими собственными потребностями! Конечно, это включает в себя расширенную тему пользовательских элементов управления. В расширенной части мы подробно объясним пользовательские элементы управления в Android! Я могу использовать это сейчас

Читайте также: