Отключить / удалить текст подсказки с плавающей меткой в ​​TextInputLayout XML

Это может показаться контр-интуитивным, но есть ли способ отключить или удалить подсказку с плавающей меткой в TextInputLayout ? Причина, по которой я хочу использовать TextInputLayout а не только EditText – это счетчик, который предоставляет TextInputLayout .

Вот что у меня есть до сих пор:

 <android.support.design.widget.TextInputLayout android:id="@+id/textContainer" android:layout_width="match_parent" android:layout_height="wrap_content" android:scrollbars="vertical" app:counterEnabled="true" app:counterMaxLength="100"> <EditText android:id="@+id/myEditText" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="top|left" android:inputType="textMultiLine|textCapSentences" android:maxLength="100" android:scrollbars="vertical" android:hint="This is my cool hint"/> </android.support.design.widget.TextInputLayout> 

Solutions Collecting From Web of "Отключить / удалить текст подсказки с плавающей меткой в ​​TextInputLayout XML"

Стартовая версия 23.2.0 Библиотеки поддержки, которую вы можете вызвать

 setHintEnabled(false) 

Или поместить его в свой XML-текст TextInputLayout как таковой:

 app:hintEnabled="false" 

Хотя имя может заставить вас думать, что оно удаляет все подсказки, оно просто удаляет плавающий.

Связанные документы и проблемы: http://developer.android.com/reference/android/support/design/widget/TextInputLayout.html#setHintEnabled(boolean)

https://code.google.com/p/android/issues/detail?id=181590

Могут быть три способа добиться этого:

1 Установите android:hint TextInputLayout на TextInputLayout на символ пробела _ и сохраните android:hint="This is my cool hint" установленный в EditText .

 <android.support.design.widget.TextInputLayout .... .... android:hint=" "> <<---------- <EditText .... .... android:hint="This is my cool hint"/> <<---------- </android.support.design.widget.TextInputLayout> 

Это работает, потому что TextInputLayout выполняет следующую проверку перед использованием подсказки EditText's :

 // If we do not have a valid hint, try and retrieve it from the EditText if (TextUtils.isEmpty(mHint)) { setHint(mEditText.getHint()); // Clear the EditText's hint as we will display it ourselves mEditText.setHint(null); } 

Установив android:hint=" " , if (TextUtils.isEmpty(mHint)) оценивается как false , а EditText сохраняет подсказку.

Второй вариант – это подкласс TextInputLayout и переопределить его параметры addView(View child, int index, ViewGroup.LayoutParams params) :

 public class CTextInputLayout extends TextInputLayout { public CTextInputLayout(Context context) { this(context, null); } public CTextInputLayout(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CTextInputLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public void addView(View child, int index, ViewGroup.LayoutParams params) { if (child instanceof EditText) { // cache the actual hint CharSequence hint = ((EditText)child).getHint(); // remove the hint for now - we don't want TextInputLayout to see it ((EditText)child).setHint(null); // let `TextInputLayout` do its thing super.addView(child, index, params); // finally, set the hint back ((EditText)child).setHint(hint); } else { // Carry on adding the View... super.addView(child, index, params); } } } 

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

 <your.package.name.CTextInputLayout .... .... > <<---------- <EditText .... .... android:hint="This is my cool hint"/> <<---------- </your.package.name.CTextInputLayout> 

3 В- третьих, и, вероятно, самым прямым способом было бы сделать следующие вызовы:

 // remove hint from `TextInputLayout` ((TextInputLayout)findViewById(R.id.textContainer)).setHint(null); // set the hint back on the `EditText` // The passed `String` could also be a string resource ((EditText)findViewById(R.id.myEditText)).setHint("This is my cool hinttt."); 

Я думаю, это поможет вам:

 textContainer.setHintAnimationEnabled(false); 

Обновить библиотеку дизайна до v23 и добавить app:hintAnimationEnabled="false" в TextInputLayout