首页 > 解决方案 > 如何设置TextInputLayout的下划线颜色

问题描述

我在 Android 9.0 上使用com.google.android.material:material:1.1.0 。我想在 TextInputLayout 没有聚焦但没有任何效果时设置它的下划线颜色。

我的风格:

<style name="EditTextTheme" parent="Widget.MaterialComponents.TextInputLayout.FilledBox">
    <item name="colorAccent">#00BFFF</item>
    <item name="colorControlNormal">#FFFF00</item>
    <item name="colorControlActivated">#FF00FF</item>
    <item name="colorControlHighlight">#FFFF00</item>
    <item name="boxStrokeColor">@color/text_input_box_stroke</item>
</style>

我的选择器(text_input_box_stroke):

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#00BFFF" android:state_focused="true"/>
    <item android:color="#FFFF00" android:state_hovered="true"/>
    <item android:color="#00FF00" android:state_enabled="false"/>
</selector>

还有我的 TextInputLayout:

<com.google.android.material.textfield.TextInputLayout
    style="@style/EditTextTheme"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_marginLeft="50dp"
    android:hint="Email">

    <com.google.android.material.textfield.TextInputEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textWebEmailAddress" />
</com.google.android.material.textfield.TextInputLayout>

标签: androidmaterial-components-android

解决方案


右键单击res-> new-> Android Resource Directory-> Resource type->color 为您的文件命名例如text_input_box_stroke.xml并将其放入颜色文件夹

text_input_box_stroke.xml

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item
    android:state_enabled="true"
    android:color="#00BFFF" />
  <item
    android:state_pressed="true"
    android:color="#FFFF00" />
  <item
    android:state_focused="true"
    android:color="#00C853" />
 <item
    android:color="#ff00ff" />
</selector>

为了防止TextInputLayout视图在包含它的活动或片段开始时获得焦点,将此属性放到包含它的父布局中TextInputLayout

android:fadeScrollbars="false"
android:fillViewport="true"

布局文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout  
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:focusableInTouchMode="true"
android:id="@+id/content">
    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/layout_data"
        style="@style/TextInputLayoutStyleFilledBox"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:hint="Hint"
        android:textColorHint="@color/black"
        app:boxBackgroundColor="@android:color/transparent"
        app:boxStrokeWidth="2dp"
        app:hintTextColor="@color/black"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">
        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/input_value"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="123456789" />
    </com.google.android.material.textfield.TextInputLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

样式.xml

<style name="TextInputLayoutStyleFilledBox" 
 parent="@style/Widget.MaterialComponents.TextInputLayout.FilledBox">
    <item name="colorAccent">#00BFFF</item>
    <item name="colorControlNormal">#FFFF00</item>
    <item name="colorControlActivated">#FF00FF</item>
    <item name="colorControlHighlight">#FFFF00</item>
    <item name="boxStrokeColor">@color/text_input_box_stroke</item>
</style>

推荐阅读