场景:
带有用户名和密码编辑文本的注册页面。
仅当输入的用户名有效时才启用密码。
布局 XML:
<com.google.android.material.textfield.TextInputLayout
...>
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/username_edit_text"
android:inputType="text"
android:onTextChanged="@{model::onUsernameTextChanged}"
.../>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
...>
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/sign_in_fragment_password_edit_text"
android:enabled="@{safeUnbox(model.isUsernameValid)}"
android:focusable="@{safeUnbox(model.isUsernameValid)}"
android:inputType="textPassword"
android:onTextChanged="@{model::onPasswordTextChanged}"
.../>
</com.google.android.material.textfield.TextInputLayout>
查看型号:
var isUsernameValid: ObservableField<Boolean> = ObservableField(false)
// On username text changed
fun onUsernameTextChanged(usernameString: CharSequence, start: Int, before: Int, count: Int) {
// Update username validity
isUsernameValid.set(usernameString.length >= 8)
}
可观察字段在视图模型isUsernameValid
中更新。onUsernameTextChanged()
上面代码的问题:
输入有效用户名时启用密码editext,但edittext不可聚焦。
android:focusable="@{safeUnbox(model.isUsernameValid)}"
即使使用软键盘下一步操作没有输入有效的用户名,删除也会使 edittext 获得焦点。