如何获取与编辑文本相关的TextInputLayout?

时间:2017-08-04 18:34:34

标签: android android-layout android-edittext butterknife android-textinputlayout

我在不同的TextInputLayouts中有很多编辑文本,如何获取TextInputLayout我在哪里使用的编辑文本?

示例:

@BindView(R.id.eT)
EditText eT;

@BindView(R.id.eT2)
EditText eT2;

@BindView(R.id.text_input_layout)
TextInputLayout textInputLayout;

@BindView(R.id.text_input_layout2)
TextInputLayout textInputLayout2;

我想要类似eT.getTextInputLayout并获取textInputLayout

xml的提取:

 <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center"
                android:orientation="horizontal">

                <Spinner
                    android:id="@+id/spinner"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAlignment="center" />

                <android.support.design.widget.TextInputLayout
                    android:id="@+id/text_input_layout"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentTop="true"
                    app:hintTextAppearance="@style/TextAppearence.App.TextInputLayout"
                    app:errorTextAppearance="@style/error_appearance"
                    app:hintAnimationEnabled="true"
                    app:errorEnabled="true">

                <EditText
                    android:id="@+id/eT"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:ems="10"
                    android:inputType="number" />

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

            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center"
                android:orientation="horizontal"
                tools:layout_editor_absoluteX="8dp"
                tools:layout_editor_absoluteY="0dp">

                <TextView
                    android:id="@+id/tV"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:labelFor="@+id/spinne2"
                    android:text="@string/tarjeta" />

                <Spinner
                    android:id="@+id/spinner2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAlignment="center" />

            </LinearLayout>

            <android.support.design.widget.TextInputLayout
                android:id="@+id/text_input_layout2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                app:hintTextAppearance="@style/TextAppearence.App.TextInputLayout"
                app:errorTextAppearance="@style/error_appearance"
                app:hintAnimationEnabled="true"
                app:errorEnabled="true">

                <EditText
                    android:id="@+id/eT2"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:ems="10"
                    android:inputType="number" />
            </android.support.design.widget.TextInputLayout>
    </LinearLayout>

我想得到例如text_input_layout,通过编辑文本eT来处理TIL中的错误(我在其他模块中执行此操作,因此我不想将编辑文本和TIL传递给此模块)。

3 个答案:

答案 0 :(得分:2)

您可以在视图 EditText 上调用getParentForAccessibility,以获取该视图 TextInputLayout参考视图在TextInputLayout内部

答案 1 :(得分:2)

@ Sami-Issa是正确的

edittext.getParent().getParent() 

返回TextInputLayout

答案 2 :(得分:1)

注意:TextInputLayout下的实际视图层次不是 确保与XML编写的视图层次结构匹配。结果是, 在TextInputLayout的子级上调用getParent(),例如 TextInputEditText-可能不返回TextInputLayout本身,但是 而是一个中间视图。如果您需要直接访问视图, 设置一个android:id并使用findViewById(int)。 https://developer.android.com/reference/android/support/design/widget/TextInputLayout

但是,如果您仍然想这样做,可以使用以下方法进行:

private static TextInputLayout findTextInputLayoutParent(View view) {
    return findTextInputLayoutParent(view.getParent(), 3);
}

private static TextInputLayout findTextInputLayoutParent(ViewParent view, int maxDepth) {
    if (view.getParent() instanceof TextInputLayout) {
        return (TextInputLayout) view.getParent();
    } else if (maxDepth > 0){
        return findTextInputLayoutParent(view.getParent(), maxDepth -1);
    }
    return null;
}