TextInputLayout animation overlaps the text when the text is set programmatically

Gabriele Mariotti picture Gabriele Mariotti · Jul 21, 2015 · Viewed 12.5k times · Source

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

Answer

Gabriele Mariotti picture Gabriele Mariotti · Jul 24, 2015

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.