Android: привязка данных: предоставление значений во включенных макетах
У меня есть следующий макет - text_input_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="textType" type="String"/>
</data>
<TextInputLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
app:errorEnabled="true"
android:textColorHint="@color/white"
android:layout_height="wrap_content"
android:layout_width="match_parent">
<android.support.design.widget.TextInputEditText
android:textColor="@color/White"
android:backgroundTint="@color/White"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="1"
android:inputType="@{textType}"
android:id="@+id/password" />
</TextInputLayout>
</layout>
Я хотел бы включить этот макет в другой макет, но измените inputType на textPassword, textEmail и т. Д. В зависимости от требования.
<layout xmlns:bind="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<include layout="@layout/text_input_layout"
android:layout_height="wrap_content"
android:layout_width="match_parent"
app:textType="textPassword"/>
</RelativeLayout>
</layout>
Я пытался использовать привязку данных, но это не похоже на работу. Может ли кто-нибудь помочь, пожалуйста?
Благодарю.
1 ответ
textPassword
это не строка Этоattribute
так что вы не можете передать его какapp:textType="textPassword"
,app:textType
принять целочисленное значение.
Решение
1) ВозьмиtextType
какInteger
значение.
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="textType"
type="Integer"/>
</data>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<android.support.design.widget.TextInputEditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="@{textType}"
/>
</android.support.design.widget.TextInputLayout>
</layout>
2) пройтиInteger
в<include
тег app:textType
,
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.text.InputType"/>
</data>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<include
layout="@layout/sample"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:textType="@{(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD)}"
/>
</android.support.constraint.ConstraintLayout>
</layout>
Вы также можете пройти 1,2,3... без импортаInputType
но это должно быть в силеInputType
,
int TYPE_CLASS_TEXT = 1;
int TYPE_TEXT_VARIATION_PASSWORD = 128;