EditText.

Урок 8 — EditText.

EditText — поле для ввода текста. Так же как и Button, является наследником TextView.

Давайте добавим EditText в наш проект и посмотрим, что получилось.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    tools:context="com.test.lessons.MainActivity">

    <TextView
        android:id="@+id/hello_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello"
        android:textSize="28sp" />

    <EditText
        android:id="@+id/name_et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/hello_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Say hello!" />

</LinearLayout>

EditText в Android
EditText в Android

Типы ввода

По-умолчанию, EditText принимает любой текст, введенный пользователем. Однако, представьте, что вам нужно получить от пользователя номер телефона, адрес e-mail, или пароль.

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

В этом нам поможет атрибут android:inputType. Этот же атрибут есть у TextView. Он поддерживает следующие значения:

  • none — поле недоступно для редактирования.
  • date — дата.
  • datetime — дата и время.
  • time — время.
  • number — целые числа.
  • numberDecimal — числа с опциональной частью после запятой (например, 13,37). Может комбинироваться с number.
  • numberPassword — целые числа, при этом введенные данные будут скрыты.
  • numberSigned — целые числа со знаком. Может комбинироваться с number.
  • phone — номер телефона.
  • text — обычный текст.
  • textAutoComplete — текст с возможностью автодополнения (автодополнение мы должны будем реализовать сами) . Может комбинироваться с text.
  • textAutoCorrect — текст с автоисправлением. Может комбинироваться с text.
  • textCapCharacters — текст с автоматическим переводом символов в верхний регистр. Может комбинироваться с text.
  • textCapSentenses — текст с автоматическим переводом в верхний регистр первого символа каждого приложения. Может комбинироваться с text.
  • textCapWords — текст с автоматическим переводом в верхний регистр первого символа каждого слова. Может комбинироваться с text.
  • textEmailAddress — адрес e-mail.
  • textEmailSubject — тема письма.
  • textFilter — текст, фильтрующий какие-то другие данные.
  • textImeMultiLine — говорит методу ввода поддерживать ввод многострочного текста. Может комбинироваться с text.
  • textLongMessage — длинный текст.
  • textMultiLine — многострочный текст. Может комбинироваться с text.
  • textNoSuggestions — говорит методу ввода не предлагать подсказки при вводе. Может комбинироваться с text.
  • textPassword — пароль. Введенные данные будут скрыты.
  • textPersonName — имя.
  • textPhonetic — текст, отображающий фонетическое произношение.
  • textPostalAddress — почтовый адрес.
  • textShortMessage — короткий текст.
  • textUri — URL.
  • textVisiblePassword — то же самое, что textPassword, но не скрывающий данные.
  • textWebEditText — текст для ввода в веб-форме.
  • textWebEmailAddress — адрес e-mail, который будет введен в веб-форме.
  • textWebPassword — пароль, который будет введен в веб-форме.

Как видите, вариантов очень много. Но не пугайтесь — на практике вам придется использовать лишь малую часть из них, так что учить их не надо :)

Давайте посмотрим пару вариантов. Например, phone:

<EditText
    android:id="@+id/name_et"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="phone" />

EditText для ввода телефона
EditText для ввода телефона

Как видите, клавиатура сменилась на цифровую с несколькими дополнительными символами. А теперь textEmailAddress:

EditText для ввода адреса e-mail
EditText для ввода адреса e-mail

На клавиатуре появился символ "@". Ну и пароль:

EditText для ввода пароля
EditText для ввода пароля

Сразу после ввода символ видно, но через небольшой промежуток времени он сменяется на "•".

Подсказка

Как дать пользователю понять, что мы хотим получить от него в поле? Показать подсказку! Для этого есть атрибут android:hint. Он принимает текстовый ресурс или текст.

<EditText
    android:id="@+id/name_et"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Введите имя"
    android:inputType="textPersonName" />

Подсказка EditText в Android
Подсказка EditText в Android

Подсказка исчезает, когда пользователь что-то вводит и появляется, когда в поле пусто.

Многострочный текст

По умолчанию в EditText, как и в TextView всего одна строка. Допустим, вы хотите, чтобы было 10 строк. Для этого нужно задать атрибут android:lines.

Однако, для того, чтобы EditText стал многострочным, нужно установить значение textMultiLine в атрибут android:inputType (его можно комбинировать с другими флагами).

Например, вот так:

<EditText
    android:id="@+id/name_et"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Введите адрес"
    android:inputType="textPostalAddress|textMultiLine"
    android:lines="10" />

Многострочный EditText
Многострочный EditText

Видите проблему? Текст и подсказка вводятся в середине поля. Чтобы это исправить, нужно задать атрибут android:gravity:

<EditText
    android:id="@+id/name_et"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="top|start"
    android:hint="Введите адрес"
    android:inputType="textPostalAddress|textMultiLine" />

android:gravity в EditText
android:gravity в EditText

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

Нужно использовать атрибут android:maxLines:

<EditText
    android:id="@+id/name_et"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="top|start"
    android:hint="Введите адрес"
    android:inputType="textPostalAddress|textMultiLine" />

android:maxLines в EditText
android:maxLines в EditText

Обратите внимание, что этот атрибут не ограничивает количество строк, которые можно ввести. Он говорит EditText, сколько строк в высоту он может занимать. Если ввести большее количество строк, то контент внутри EditText начнет скроллиться.

Получение введенного текста

Отлично, мы научились конфигурировать поле для ввода текста. Но от того, что мы показали его, толку не очень много, если мы не знаем, как получить введенные данные, не так ли?

Давайте модифицируем задачу из прошлого урока: мы просим пользователя ввести его имя, и по нажатию на кнопку "здороваемся" с ним в TextView.


Продолжение доступно на платных тарифах

Это недорого — всего от 440 ₽ в месяц!


ВЫБРАТЬ ТАРИФ


Продолжение доступно после регистрации

Все уроки на сайте доступны абсолютно бесплатно после регистрации.

Регистрация займёт меньше минуты ;)