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

При использовании EditText в сочетании с Design lib's (ver 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); 

Asterisk накладывает подсказку

Простая иллюстрация кода: 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"); 

Dependency: compile 'com.android.support:design:22.2.1'

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

Solutions Collecting From Web of "EditText getHint () возвращает значение null при использовании библиотеки поддержки дизайна"

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

Вы можете получить подсказку следующим образом:

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

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

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

Счастливая черепаха! 🙂

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

((TextInputLayout) view.getParent ()). GETHINT ()

Это исправлено в поддержке дизайна 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"/> 

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

 TextInputLayout inputField = (TextInputLayout) findViewById(R.id.inputLayout); String hint = String.format("%s *", inputField.getHint()); inputField.setHint(hint);