【问题标题】:Change TextInputLayout border color in unfocus state在未聚焦状态下更改 TextInputLayout 边框颜色
【发布时间】:2019-08-22 08:50:14
【问题描述】:

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

【问题讨论】:

  • 不,我想动态更改 TextInputLayout 的边框颜色。对于当前示例,如果 isValidEmail() 返回 true,我希望在未聚焦模式下使用一种颜色,如果为 false - 另一种。我不能用样式来做到这一点。

标签: android material-design android-textinputlayout material-components-android android-textinputedittext


【解决方案1】:

你可以使用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>

【讨论】:

    猜你喜欢
    • 2019-02-10
    • 1970-01-01
    • 2019-02-03
    • 2014-06-18
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多