12

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

任何想法可能是什么原因?

在此处输入图像描述

4

2 回答 2

43

您应该更改提示,而不是在 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 提示

于 2015-07-08T13:58:23.620 回答
1

我用这个 ((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);
于 2015-07-08T13:43:17.353 回答