EditText getHint() возвращает null при использовании библиотеки поддержки дизайна

При использовании EditText в сочетании с Design lib (версия 22.2.1) TextInputLayout при получении подсказки программно возвращает значение null.

Я пытаюсь программно добавить звездочку '*' к обязательному полю, следовательно, EditText.getHint(), но тот факт, что он возвращает null, является проблемой в этом случае.

EditText editText = (EditText) findViewById(R.id.edit2);
String hint = String.format("%s *", editText.getHint());
editText.setHint(hint);

Звездочка перекрывает подсказку

Простая иллюстрация кода: Layout.xml:

<android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    <EditText
            android:id="@+id/edit2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/hello_world"
            android:inputType="text"/>
</android.support.design.widget.TextInputLayout>

Джава:

EditText editText = (EditText) findViewById(R.id.edit2);
if (editText.getHint() == null) throw new AssertionError("Hint should not be null");

зависимость: скомпилировать 'com.android.support:design:22.2.1'

Ранее связанная проблема здесь !


person dobridog    schedule 30.07.2015    source источник
comment
Есть много проблем с подсказками в TextInputLayout. Вы можете попробовать другие реализации плавающих меток.   -  person CommonsWare    schedule 30.07.2015
comment
Что ж, проблема, очевидно, заключается в setHint(), а также в том, что она не отражает подсказку, ранее настроенную в TextInputLayout.   -  person dobridog    schedule 30.07.2015


Ответы (3)


На самом деле подсказка перемещается в родительское представление TextInputLayout, которое окружает представление EditText:

Получить подсказку можно так:

android.support.design.widget.TextInputLayout parent = (android.support.design.widget.TextInputLayout) yourEditText.getParent();
String hint = parent.getHint().toString();

И если вы хотите добавить *, сделайте это так:

parent.setHint(parent.getHint() + "*");

Удачного кодирования! :)

person Ivo Stoyanov    schedule 25.09.2015
comment
Обратите внимание, что если вы используете TextInputEditText, как рекомендуется, вам нужно использовать getParent().getParent(), чтобы фактически получить TextInputLayout - person Bron Davies; 14.09.2016

Подсказка связана с ее родительским макетом

((TextInputLayout)view.getParent()).getHint()

person rinkesh    schedule 09.08.2016

Это исправлено в поддержке дизайна 23.0.0, но проект должен быть скомпилирован для API 23.

build.gradle

android {
    compileSdkVersion 23
    buildToolsVersion '23'
    ....
}
dependencies{
    compile 'com.android.support:appcompat-v7:23.0.0'
...
}

Установка подсказки на EditText как раньше:

<android.support.design.widget.TextInputLayout
    android:id="@+id/inputField"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/hello_world"
        android:inputType="text"/>

Now adding an extra character to the hint:

TextInputLayout inputField = (TextInputLayout) findViewById(R.id.inputLayout);
String hint = String.format("%s *", inputField.getHint());
inputField.setHint(hint);
person dobridog    schedule 25.08.2015
comment
Это не исправлено в 23.0.0 - person superuserdo; 02.09.2015
comment
Проблема с объявлением подсказки в TextInputLayout заключается в том, что значение подсказки не отображается, если оно не установлено программно (как в примере). Но в конечном итоге сработало перемещение подсказки для редактирования текста. Обновлю ответ, не стесняйтесь проверять. - person dobridog; 02.09.2015
comment
Проблема вопроса заключается в том, что подсказка TextInputLayout EditText возвращает значение null. Я убедился, что эта проблема все еще существует в версии 23 библиотеки. Даже при установке подсказки в TextInputLayout подсказка по-прежнему возвращает значение null. - person superuserdo; 02.09.2015