12

I noticed some strange behaviour of TextInputLayout:

When I add the following to my layout:

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

        <EditText
            android:id="@+id/txtFirstName"
            style="@style/EditTextStyle"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:hint="In layout"
            android:singleLine="true" />
    </android.support.design.widget.TextInputLayout>

everything works as expected.

When I inflate a similar Layout like:

    View v = LayoutInflater.from(this).inflate(R.layout.edittext_w_surrounding_textinputlayout, null);
    EditText editText = (EditText) v.findViewById(R.id.editText);
    editText.setHint("Added programmatically");

    ViewGroup root = (ViewGroup) findViewById(R.id.root);
    root.addView(v);

the TextInputLayout doesn't appear and the EditText behaves the standard way.

Any ideas what the reason could be?

enter image description here

fweigl
  • 21,278
  • 20
  • 114
  • 205

2 Answers2

43

You should change hint, not on EditText, but on TextInputLayout. So it will be:

TextInputLayout v = (TextInputLayout) LayoutInflater.from(this).inflate(R.layout.edittext_w_surrounding_textinputlayout, null);
v.setHint("Added programmatically");

TextInputLayout has it's own hint parameter and when inflating from layout it get's hint from it's child EditText and set empty hint on it.

When you want to change hint programatically you have to call textInputLayout.setHint(String text) instead of changing EditText hint

pjanecze
  • 3,145
  • 3
  • 21
  • 28
1

I use this ((FrameLayout) findViewById(R.id.framePreview)).addView(preview); with no issues at all, maybe its the view type? should this

ViewGroup root = (ViewGroup) findViewById(R.id.root);
root.addView(v);

not be this

LinearLayout root = (LinearLayout) findViewById(R.id.root);
root.addView(v);
matty357
  • 637
  • 4
  • 16
  • I tried different ViewGroup types for 'root' and also assigning them explicitly like you did, made no difference. – fweigl Jul 08 '15 at 13:55
  • is it because you are adding v and you should be adding editText, editText is where you changed the text – matty357 Jul 08 '15 at 13:56
  • If a would add only the EditText, the TextInputLayout would be lost. – fweigl Jul 08 '15 at 13:57