我有一个TextInputLayout,里面有TextInputEditText。 TextInputLayout实现主题,使其在聚焦和未聚焦时边框颜色变为黄色:
TextInputEditText:
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做一些事情,但是我认为这不是好方法。我该如何纠正?
TextInputEditText:
<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>
答案 0 :(得分:0)
您可以使用方法textInputLayout.setBoxStrokeColor(..)
。
类似的东西:
if isValid(){
textInputLayout.setBoxStrokeColor(...);
} else {
textInputLayout.setBoxStrokeColor(...);
}
当焦点未对准时,可以使用选择器获得不同的颜色。
像这样:
<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="?attr/colorOnSurface" android:state_hovered="true"/>
<item android:alpha="0.12" android:color="?attr/colorOnSurface" android:state_enabled="false"/>
<item android:alpha="0.38" android:color="?attr/colorOnSurface"/>
</selector>