Перейти к содержимому
Меню
  • Java SE
  • Android
  • Поиск
  • Java SE
  • Android

JAVA-HELP

Сайт для Java разработчиков

Всплывающие подсказки для EditText: фичи Design Support Library

Сегодня я расскажу вам об EditText Floating Labels (всплывающие подсказки для EditText) в Android.

Для начала нужно прописать следующие зависимости в файле build.gradle, который лежит на уровне приложения:

dependencies {
    compile 'com.android.support:design:23.2.+'
}

Для отображения всплывающих подсказок над полем EditText используется TextInputLayout, который позволяет обернуть находящийся в нем view-элемент, в нашем случае это поле EditText. Такая компоновка также позволяет показать сообщения об ошибках, расположенные ниже поля EditText. Когда поле EditText в фокусе, назначенная подсказка-«поплавок» будет показана на верхней левой стороне.

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="12dp"
    android:paddingRight="12dp"
    android:paddingTop="8dp"
    android:paddingBottom="8dp">
    <android.support.design.widget.TextInputLayout
        android:id="@+id/login_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp">
        <EditText
            android:id="@+id/edit_text_email"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textEmailAddress"
            android:hint="@string/username">
    </android.support.design.widget.TextInputLayout>
    <android.support.design.widget.TextInputLayout
        android:id="@+id/password_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp">
        <EditText
            android:id="@+id/edit_text_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPassword"
            android:hint="@string/password">
    </android.support.design.widget.TextInputLayout>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/sign_in"
        android:id="@+id/sing_in_button"
        android:layout_gravity="center_horizontal">
</LinearLayout>

Ну и соответственно унаследоваться от AppCompatActivity, чтобы изменения стали отображаться:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
    }
}

Также не забываем прописать строковые ресурсы:

<resources>
    <string name="app_name">EditText Floating Labels Demo</string>
    <string name="username">Username</string>
    <string name="password">Password</string>
    <string name="sign_in">Sign In</string>
    <string name="login_error">Username can not be empty</string>
</resources>

Кроме подсказки, мы можем показать ошибку в TextInputLayout. Для этого нужно воспользоваться методом setErrorEnabled (…) и setError (…). В качестве примера можно проверить поле входа в систему во время фокусировки на другой view-элемент. Для этого достаточно обновить наш метод OnCreate(…) и реализовать интерфейс onFocusChange(…) с его методами.

public class MainActivity extends AppCompatActivity implements View.OnFocusChangeListener {

    TextInputLayout mUsernameLayout;
    EditText mUsername;
    EditText mPassword;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
        mUsernameLayout = (TextInputLayout) findViewById(R.id.login_layout);
        mUsername = (EditText) findViewById(R.id.edit_text_email);
        mPassword = (EditText) findViewById(R.id.edit_text_password);

        mUsername.setOnFocusChangeListener(this);
        mPassword.setOnFocusChangeListener(this);
    }
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (v != mUsername && mUsername.getText().toString().isEmpty()) {
            mUsernameLayout.setErrorEnabled(true);
            mUsernameLayout.setError(getResources().getString(R.string.login_error));
        } else {
            mUsernameLayout.setErrorEnabled(false);
        }
    }
}
Вот так в итоге это будет выглядеть.

Надеюсь, материал был полезен и найдет свое применение в Вашем приложении.
Источник: EditText Floating Labels

Категории
  • Material Design
Предыдущая заметка

Исследуем новую Android Design Support Library. Часть 1

Следующая заметка

SnackBar: фичи Design Support Library

Рубрики

  • Android
    • Android-библиотеки
    • Android-сниппеты
    • Material Design
    • Инструменты разработчика
    • Уроки Android
  • Java SE
    • Java-сниппеты
    • Изучение Java
    • Обзор Java-классов
    • Основы Java
  • Kotlin

Популярные записи

  • Загрузка изображений с помощью библиотеки Glide. Начало работы
  • Руководство по использованию ORM DBFlow в Android-приложении
  • Анимированный Toolbar: фичи Design Support Library
  • Я хочу программировать под Android. Вопрос #5
  • Используем ACRA в своем приложении

Copyright © 2020– JAVA-HELP. Все права защищены. Политика конфиденциальности