Элемент EditText является подклассом класса TextView
. Он также представляет текстовое поле, но теперь уже с возможностью ввода
и редактирования текста. Таким образом, в EditText мы можем использовать все те же возможности, что и в TextView.
Из тех атрибутов, что не рассматривались в теме про TextView, следует отметить атрибут android:hint. Он позволяет задать текст, который будет отображаться в качестве подсказки, если элемент EditText пуст. Кроме того, мы можем использовать атрибут android:inputType, который позволяет задать клавиатуру для ввода. В частности, среди его значений можно выделить следующие:
text
: обычная клавиатура для ввода однострочного текста
textMultiLine
: многострочное текстовое поле
textEmailAddress
: обычная клавиатура, на которой присутствует символ @
, ориентирована на ввод email
textUri
: обычная клавиатура, на которой присутствует символ /
, ориентирована на ввод интернет-адресов
textPassword
: клавиатура для ввода пароля
textCapWords
: при вводе первый введенный символ слова представляет заглавную букву, остальные - строчные
number
: числовая клавиатура
phone
: клавиатура в стиле обычного телефона
date
: клавиатура для ввода даты
time
: клавиатура для ввода времени
datetime
: клавиатура для ввода даты и времени
Используем EditText:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:id="@+id/name" android:layout_width="0dp" android:layout_height="wrap_content" android:hint="Введите имя" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintRight_toRightOf="parent"/> <EditText android:id="@+id/message" android:layout_marginTop="16dp" android:layout_width="0dp" android:layout_height="0dp" android:hint="Введите сообщение" android:inputType="textMultiLine" android:gravity="top" app:layout_constraintTop_toBottomOf="@+id/name" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
Первое поле здесь обычное однострочное, а второе - многострочное. Чтобы во втором поле текст выравнивался по верху, дополнительно устанавливается атрибут android:gravity="top"
.
Одной из возможностей элемента EditText также является возможность обработать введенные символы по мере ввода пользователя. Для этого определим в файле activity_main.xml следующую разметку:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textView" android:layout_width="0dp" android:layout_height="wrap_content" android:textSize="34sp" app:layout_constraintTop_toTopOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"/> <EditText android:id="@+id/editText" android:layout_width="0dp" android:layout_height="wrap_content" android:hint="Введите имя" app:layout_constraintTop_toBottomOf="@+id/textView" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
Предполагается, что введенные в EditText символы тут же будут отображаться в элементе TextView. И для этого также изменим код MainActivity:
package com.example.viewapp; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EditText editText = findViewById(R.id.editText); editText.addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable s) {} public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { TextView textView = findViewById(R.id.textView); textView.setText(s); } }); } }
С помощью метода addTextChangedListener() здесь к элементу EditText добавляется слушатель ввода текста - объект TextWatcher. Для его использования нам надо реализовать три метода, но в реальности нам хватит реализации метода onTextChanged, который вызывается при изменении текста. Введенный текст передается в этот метод в качестве параметра CharSequence. В самом методе просто передаем этот текст в элемент TextView.
В итоге при вводе в EditText все символы также будут отображаться в TextView: