У меня есть TextInputLayout с TextInputEditText внутри. TextInputLayout реализует тему, чтобы его цвет границы был желтым, когда он сфокусирован и не сфокусирован:
ТекстИнпутРедактироватьТекст:
style="@style/MyTextInputLayout"
MyTextInputLayout:
<style name="MyTextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<item name="boxStrokeColor">@color/edit_textbox_color</item>
</style>
edit_textbox_color:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="?attr/colorPrimary" android:state_focused="true"/>
<item android:alpha="0.87" android:color="@color/colorPrimary" android:state_hovered="true"/>
<item android:alpha="0.12" android:color="@color/colorPrimary" android:state_enabled="false"/>
<item android:alpha="0.38" android:color="@color/colorPrimary"/>
</selector>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/layout_email_wrapper"
style="@style/MyTextInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/margin_8"
android:layout_marginStart="@dimen/margin_medium"
android:layout_marginTop="@dimen/margin_ultra_big"
android:layout_marginEnd="@dimen/margin_medium"
android:hint="Password"
app:errorEnabled="true">
Это работает, но теперь я пытаюсь найти способ изменить цвет границы, если значение внутри поля правильное.
Поэтому я пишу:
RxTextView.textChanges(emailNew).subscribe(
value -> {
isPasswordCorrect = isValidEmail(value.toString());
if (isPasswordCorrect) {
//???
}
}));
..и я не знаю что делать. Я не могу динамически менять свою тему, а другие решения (например, setBoxStrokeColor
) меняют цвет только тогда, когда поле сфокусировано.
Я думаю, что могу что-то сделать с focusListener, но я думаю, что это не очень хороший способ. Как я могу сделать это правильно?
ТекстИнпутРедактироватьТекст:
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/edit_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress" />
</com.google.android.material.textfield.TextInputLayout>