TextInputLayout не отображается при программном добавлении представления

Я заметил какое-то странное поведение TextInputLayout:

когда я добавить следующее:

    <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>

все работает, как ожидалось.

когда я надуваю подобный макет, как:

    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);

на TextInputLayout не появляется и EditText ведет себя стандартным образом.

есть идеи, что причина может быть?

enter image description here

2 ответов


вы должны изменить подсказку, не на EditText, а на TextInputLayout. Так и будет:

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

TextInputLayout имеет свой собственный параметр подсказки, и при раздувании из макета он получает подсказку от своего дочернего EditText и устанавливает пустую подсказку на нем.

когда вы хотите изменить подсказку программно, вы должны вызвать textInputLayout.setHint (текст строки) вместо изменения подсказки EditText


Я использую этот ((заменить) команду findViewById(Р. ИД.framePreview)).addView(просмотр), без проблем на всех, может быть, его тип представления? если это

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

не быть

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