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>
A partir de la versión 23.2.0 de la biblioteca de soporte puede llamar
setHintEnabled(false)
o ponlo en tu TextInputLayout xml como tal:
app:hintEnabled="false"
Aunque el nombre podría hacerte pensar que elimina todas las sugerencias, solo elimina la flotante.
Documentos y problemas relacionados: http://developer.android.com/reference/android/support/design/widget/TextInputLayout.html#setHintEnabled(boolean)
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