textinputedittext style studio outlined float fields edittext android android-textinputlayout

android - style - Deshabilitar/eliminar texto de sugerencia de etiqueta flotante en TextInputLayout XML



textinputlayout android (5)

Esto puede parecer contrario a la intuición, pero ¿hay una manera de deshabilitar o eliminar la sugerencia de etiqueta flotante en TextInputLayout ? La razón por la que quiero usar TextInputLayout lugar de solo un EditText es para el contador que proporciona TextInputLayout .

Aquí está lo que tengo hasta ahora:

<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>



Con com.google.android.material puede ocultar por

<com.google.android.material.textfield.TextInputLayout .... app:hintAnimationEnabled="false" app:hintEnabled="false" > <com.google.android.material.textfield.TextInputEditText ........ android:hint="@string/label_hint" /> </com.google.android.material.textfield.TextInputLayout>


Creo que esto te ayudará:

textContainer.setHintAnimationEnabled(false);


Puede haber tres maneras de lograr esto:

1 Establezca android:hint en TextInputLayout en un carácter de espacio _ , y mantenga android:hint="This is my cool hint" en el EditText .

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

Esto funciona porque TextInputLayout realiza la siguiente comprobación antes de usar la 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); }

Al configurar android:hint=" " , if (TextUtils.isEmpty(mHint)) evalúa como false , y EditText conserva su sugerencia.

2 La segunda opción sería subclasificar TextInputLayout y anular su 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); } } }

Luego use su CTextInoutLayout personalizado en lugar del de la biblioteca de soporte de diseño:

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

3 Tercero, y probablemente la forma más directa sería hacer las siguientes llamadas:

// 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.");


actualice la biblioteca de diseño a v23 y agregue app:hintAnimationEnabled="false" en TextInputLayout