【问题标题】:TextInputLayout not showing when View added programmatically以编程方式添加 View 时 TextInputLayout 不显示
【发布时间】:2015-07-08 13:29:53
【问题描述】:

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

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

【问题讨论】:

  • root 的布局在哪里?
  • 它在 Activity 的布局中。准确地说,它是一个 LinearLayout。

标签: android android-layout android-textinputlayout


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我用这个 ((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);
    

    【讨论】:

    • 我为“root”尝试了不同的 ViewGroup 类型,并像你一样明确地分配它们,没有任何区别。
    • 是不是因为你要添加 v 而你应该添加 editText,editText 是你更改文本的地方
    • 如果 a 只添加 EditText,TextInputLayout 将会丢失。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    相关资源
    最近更新 更多