Показать вспомогательный текст под EditText вместе с подсказкой

Я пытаюсь сделать что-то в этих строках:

Пример EditText

Я могу показать подсказку с помощью android:hint="Email Address", но не могу показать вспомогательный текст - Это будет ваше имя пользователя электронной почты

    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/et_username"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="15"
            android:hint="Username"
            app:et_helper="Username is preferably your registered email"/>

    </android.support.design.widget.TextInputLayout>`

То, что я получаю, это только и не имя пользователя предпочтительно является вашим зарегистрированным адресом электронной почты ниже edittext:

Вывод:

выход

Любые указатели приветствуются. Спасибо.


comment
Возможный дубликат Android добавляет текст-заполнитель в EditText   -  person Shamas S    schedule 24.11.2015
comment
это будет ваше имя пользователя, это тоже заполнитель??   -  person curiousMind    schedule 24.11.2015
comment
То, что вы ищете, это плавающий текст редактирования метки.   -  person noev    schedule 24.11.2015
comment
Мой следует рассматривать как ответ, пожалуйста, выберите его.   -  person Amirhossein Naghshzan    schedule 11.11.2016
comment
Возможный дубликат Design Android EditText для отображения сообщения об ошибке как описано в Google   -  person Pouya Danesh    schedule 17.06.2017


Ответы (7)


Лучше всего использовать TextInputLayout. Google представил его в новой библиотеке дизайна. Чтобы использовать TextInputLayout, вы должны добавить следующее в свои зависимости build.gradle:

compile 'com.android.support:design:22.2.0'

Затем используйте его в своих xml-файлах:

<android.support.design.widget.TextInputLayout
android:id="@+id/textInputLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<EditText
    android:id="@+id/editText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:hint="Enter your name"/>
</android.support.design.widget.TextInputLayout>

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

TextInputLayout til = (TextInputLayout)    findViewById(R.id.textInputLayout);
til.setErrorEnabled(true);
til.setError("You need to enter a name");

введите описание изображения здесь

person Amirhossein Naghshzan    schedule 24.11.2015
comment
@AdarshYadav создайте собственный стиль, который использует @android:style/TextAppearance в качестве родителя в файле styles.xml, и используйте его в виджете TextInputLayout app:errorTextAppearance - person Amirhossein Naghshzan; 26.04.2017

В библиотеке поддержки дизайна 28 в TextInputLayout добавлена ​​встроенная вспомогательная функция Text.

 implementation 'com.android.support:design:28.0.0'

Теперь включите ошибку с помощью xml или программно

 textInputLayout.isHelperTextEnabled=true
 textInputLayout.error="Email can not be Empty!!!"

Кроме того, подсказку и ошибку теперь можно использовать вместе!!!

Пример

et.setOnFocusChangeListener { v, b ->
            if (b) {
                textInputLayout.helperText = "yourhelperText"

            } else {
                textInputLayout.helperText = null
                if(et.text.toString()==""){    // or any other validation
                    textInputLayout.error="Email can not be Empty!!!"
                }
            }

TextInputLayout | Разработчики Android

EDIT Не забудьте включить error и helperText через xml или программно.

person TechAJ    schedule 19.11.2018

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

https://medium.com/@elye.project/material-login-with-helper-text-232472400c15#.vm28p662v

person Elye    schedule 08.08.2016

Полный XML со стилем TextInputLayout OutlinedBox и TextInputEditText

       <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/til_customer_no"
            style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="5dp"
            android:layout_marginLeft="5dp"
            android:layout_marginEnd="5dp"
            android:layout_marginRight="5dp"
            android:padding="3dp"
            app:helperTextEnabled="true"
            app:helperText="* Enter customer number that will be used">

            <!--android:maxLength="13"-->
            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/et_customer_no"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Customer No"
                android:inputType="number" />

        </com.google.android.material.textfield.TextInputLayout>

person Emmanuel Njorodongo    schedule 11.01.2021

Итак, что вы хотите, это:

Вспомогательный текст

Вы можете добиться этого, используя эту библиотеку:

https://github.com/rengwuxian/MaterialEditText

Вы можете установить атрибут «вспомогательный текст», чтобы отображать текст под строкой, и «подсказку», чтобы отображать текст над строкой. Ниже приведен пример макета для прикрепленного изображения

<com.rengwuxian.materialedittext.MaterialEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Password"
        android:inputType="textPassword"
        app:met_floatingLabel="normal"
        app:met_helperText="Must contain at least 8 characters"
        app:met_helperTextAlwaysShown="true"/>
person yasirebricks    schedule 17.06.2016

У меня был аналогичный вопрос, заданный it-in-android">здесь. Если вы хотите, чтобы два представления EditText были закрыты вертикально в LinearLayout, я думаю, что нет никакого способа. Один из способов, я думаю, заключается в том, что вы можете установить android:gravity верхнего EditText на «нижний» и «верхний» на нижний EditText. Но в RelativeLayout это должно быть легко.

TextInputLayout можно использовать, если вы хотите показать текст подсказки (поверх EdiText), даже когда пользователь его набирает. Обычно с установкой подсказки для EditText это не работает. Текст подсказки исчезнет после того, как вид будет сфокусирован прикосновением к нему.

person cgr    schedule 24.11.2015

Вы можете просто использовать атрибут app:helperText в TextInputLayout (с библиотекой com.google.android.material:material:1.2.1) следующим образом:

<com.google.android.material.textfield.TextInputLayout
        ...
        android:hint="Email Address"
        app:helperText="This will be your email username">

        <com.google.android.material.textfield.TextInputEditText
            ... />

</com.google.android.material.textfield.TextInputLayout>

или программно (котлин):

textInputLayout.helperText = "This will be your email username"
person capo11    schedule 28.09.2020