TextInputLayout中的Viewgroup使浮动标签不起作用

时间:2017-04-13 11:38:29

标签: android androiddesignsupport android-textinputlayout

我使用android TextInputLayout在EditText上显示浮动标签。

但是我想在EditText的左边显示一个ProgressBar,因此我在相对布局中的TextInputLayout和EditText中添加了一个相对布局。

通过这样做,浮动标签不起作用。

如果我从TextInputLayout的相对布局中删除并使EditText指向它的子项,那么它就可以了。

EditText也需要成为TextInputLayout的直接子项,如果是这样,我们如何将另一个小部件放到EditTexts左边,如ProgressBar。

作为TextInputLayout inhertis来自LinearLayout,向其添加子项将垂直添加子项,但我想在EditText之上添加视图。

<android.support.design.widget.TextInputLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/holderName"

android:layout_height="wrap_content"

 android:layout_width="match_parent">


<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

<android.support.design.widget.TextInputEditText
    android:id="@+id/etField"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Name"


    >
</android.support.design.widget.TextInputEditText>

    <ProgressBar
        android:id="@+id/progress"
        style="?android:attr/progressBarStyle"
        android:layout_width="16dp"
        android:layout_height="match_parent"
        android:indeterminateTint="@color/primary"
        android:layout_gravity="right|center_vertical"
        android:layout_marginRight="15dp"
        android:visibility="visible"
        />


</FrameLayout>

2 个答案:

答案 0 :(得分:1)

解决方案是将TextInputLayoutProgressBarFrameLayout包裹起来,如下所示:

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.design.widget.TextInputLayout
            android:id="@+id/holderName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp">

            <android.support.design.widget.TextInputEditText
                android:id="@+id/etField"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Name" />

        </android.support.design.widget.TextInputLayout>

        <ProgressBar
            android:id="@+id/progress"
            style="?android:attr/progressBarStyle"
            android:layout_width="16dp"
            android:layout_height="match_parent"
            android:layout_gravity="right|center_vertical"
            android:layout_marginRight="15dp"
            android:indeterminateTint="@color/primary"
            android:visibility="visible" />
    </FrameLayout>

答案 1 :(得分:0)

该功能不可用。在addView()中,它会直接搜索EditText

这是代码

@Override
public void addView(View child, int index, final ViewGroup.LayoutParams params) {
    if (child instanceof EditText) {
          mInputFrame.addView(child, new FrameLayout.LayoutParams(params));

          // Now use the EditText's LayoutParams as our own and update them to make enough space
          // for the label
          mInputFrame.setLayoutParams(params);
          updateInputLayoutMargins();

          setEditText((EditText) child);
    } else {
          // Carry on adding the View...
          super.addView(child, index, params);
    }
}

因此,第一个孩子必须是EditText类型。

如果你想要这个功能,那么在RelativeLayout里面拿走你的TextInputLayoutProgressBar并设置进度条的位置