Search code examples
androidmaterial-designandroid-support-libraryandroid-textinputlayoutandroid-support-design

TextInputLayout animation overlaps the text when the text is set programmatically


I am using TextInputLayout with the design support library 22.2.1.

I set the value of the EditText programmatically, and when the screen appears, I can see that the hint of the TextInputLayout overlaps the text inside, before moving in the floating position.

Here a simple layout:

    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/editText1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="hint1" />

    </android.support.design.widget.TextInputLayout> 

In my Activity:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

        EditText e1 = (EditText) findViewById(R.id.editText1);
        e1.setText("TEXT TEST 1");
   }

Does anyone know a workaround?

enter image description here


Solution

  • Currently the only way to avoid this behavior is to add the EditText programmatically.

    1. Create a TextInputLayout without the EditText. Programmatically or via XML inflation - doesn't matter, but it has to be empty.
    2. Create the EditText and set its text to whatever you need.
    3. Add the EditTExt to the TextInputLayout.

    Here's an example:

    TextInputLayout til = (TextInputLayout) findViewById(R.id.til);
    til.setHint(R.string.hint);
    
    EditText et = new EditText(getContext());
    et.setText(value);
    
    til.addView(et);
    

    UPDATED 21/08/2015 WITH DESIGN LIBRARY V23:

    With the design support library v23 you can disable the animation:

    Just use the setHintAnimationEnabled method:

    textInputLayout.setHintAnimationEnabled(boolean)
    

    Here the issue on Google Tracker.