android - textinputedittext - textinputlayout style




Deshabilitar/eliminar texto de sugerencia de etiqueta flotante en TextInputLayout XML (4)

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)

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

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> 

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





android-textinputlayout