我在不同的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传递给此模块)。
答案 0 :(得分:2)
您可以在视图或 EditText 上调用getParentForAccessibility
,以获取该视图 的TextInputLayout
参考视图在TextInputLayout内部
答案 1 :(得分:2)
答案 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;
}