在未聚焦状态下更改TextInputLayout边框颜色

时间:2019-04-01 08:28:44

标签: android android-textinputlayout android-textinputedittext

我有一个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>

1 个答案:

答案 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>