以编程方式添加视图时不显示 TextInputLayout

TextInputLayout not showing when View added programmatically

我注意到 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 以标准方式运行。

知道原因是什么吗?

我用这个 ((FrameLayout) findViewById(R.id.framePreview)).addView(preview);完全没有问题,也许是视图类型? 这个应该

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

不是这个

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

您应该更改提示,不是在 EditText 上,而是在 TextInputLayout 上。所以它将是:

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

TextInputLayout 有它自己的提示参数,当从布局中膨胀时,它从它的子 EditText 获得提示并在其上设置空提示。

当您想以编程方式更改提示时,您必须调用 textInputLayout.setHint(String text) 而不是更改 EditText 提示