设置backgroundTint会着色整个TextInputEditText,如何仅修改EditText下划线颜色?
你给TextInputEditText设置backgroundTint不生效,是因为你已经将其background设为全透明,且Material组件库中TextInputLayout的下划线样式由父布局统一管控,子EditText的背景属性不会作用于下划线。
方案1:XML静态配置
- 首先在
res/color目录下新建下划线颜色选择器text_input_underline_color.xml,适配不同交互状态:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="#FFFFFF" android:state_focused="true" /> <!-- 聚焦时白色下划线 --> <item android:color="#8E8E93" android:state_enabled="true" /> <!-- 失焦时灰色下划线 --> <item android:color="#FF3B30" android:state_error="true" /> <!-- 错误状态红色下划线 --> </selector>
- 给你的
TextInputLayout新增下划线控制属性,修改后的完整代码如下:
<com.google.android.material.textfield.TextInputLayout android:id="@+id/passwordInputLayout" android:layout_width="384dp" android:layout_height="75dp" android:layout_marginStart="16dp" android:layout_marginEnd="16dp" android:hint="@string/password_hint" android:textColorHint="@color/white" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/usernameInputLayout" app:passwordToggleEnabled="true" app:passwordToggleTint="#8E8E93" <!-- 下划线配置 --> app:boxBackgroundMode="filled" app:boxBackgroundColor="@android:color/transparent" app:boxStrokeColor="@color/text_input_underline_color" app:boxStrokeWidth="1dp" app:boxStrokeWidthFocused="2dp"> <com.google.android.material.textfield.TextInputEditText android:id="@+id/passwordInputEditText" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPassword" android:text="@={authViewModel._password}" android:background="@null" android:textColor="@color/white"/> </com.google.android.material.textfield.TextInputLayout>
属性说明:
app:boxBackgroundMode="filled":指定输入框样式为填充带下划线的模式app:boxBackgroundColor:设置输入框填充背景,不需要的话设为透明即可app:boxStrokeColor:下划线颜色,传入选择器可适配不同状态app:boxStrokeWidth/app:boxStrokeWidthFocused:分别控制失焦、聚焦状态下的下划线高度
方案2:代码动态修改
如果需要运行时动态修改下划线颜色,可直接调用TextInputLayout的相关方法:
// 直接设置固定颜色 passwordInputLayout.setBoxStrokeColor(ContextCompat.getColor(this, R.color.white)) // 设置状态选择器适配不同交互场景 passwordInputLayout.boxStrokeColorStateList = ContextCompat.getColorStateList(this, R.color.text_input_underline_color)
注意事项
确保你的项目依赖的Material组件库版本在1.1.0及以上,低版本部分属性不生效。不要给子TextInputEditText设置backgroundTint属性,避免和父布局样式冲突。
内容的提问来源于stack exchange,提问作者misterios
相关产品推荐
相关产品推荐

