【问题标题】:TextInputLayout underline color does not adapt to custom color when focused聚焦时TextInputLayout下划线颜色不适应自定义颜色
【发布时间】:2020-02-05 10:33:33
【问题描述】:

不确定我错过了什么,但每次edittext 聚焦时,下划线颜色都不会适应我设置的自定义颜色。这里是我的主题代码供参考

<style name="EditTextHintWhite" parent="@style/AppTheme">
   <item name="color">@color/white</item>
   <item name="android:textColorHint">@color/white</item>
   <item name="colorControlNormal">@color/white</item>
   <item name="colorControlActivated">@color/white</item>
   <item name="colorError">@color/white</item>
</style>

如您所见,我已将它们全部设置为白色,但不知何故,当 edittext 获得焦点时,下划线变为绿色

这是我的布局代码

<com.google.android.material.textfield.TextInputLayout
        android:id="@+id/email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/EditTextHintWhite">

        <androidx.appcompat.widget.AppCompatEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/email"
            android:inputType="textEmailAddress"
            android:maxLines="1"
            android:shadowColor="@color/white"
            android:singleLine="true"
            android:textColor="@color/white"
            app:backgroundTint="@color/white" />

</com.google.android.material.textfield.TextInputLayout>

【问题讨论】:

  • 我找到了this。我希望这是你的解决方案

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


【解决方案1】:

具有 FilledBox 样式的下划线颜色由 boxStrokeColor 属性定义。您可以将其添加到布局或自定义样式中。比如:

<style name="...." parent="Widget.MaterialComponents.TextInputLayout.FilledBox" >
    <!-- underline color in FilledBox style -->
    <item name="boxStrokeColor">@color/custom_selector_filled_stroke_color</item>
    ....
</style>

这是选择器的默认值:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:color="?attr/colorPrimary" android:state_focused="true"/>
  <!-- 4% overlay over 42% colorOnSurface -->
  <item android:alpha="0.46" android:color="?attr/colorOnSurface" android:state_hovered="true"/>
  <item android:alpha="0.38" android:color="?attr/colorOnSurface" android:state_enabled="false"/>
  <item android:alpha="0.42" android:color="?attr/colorOnSurface"/>
</selector>

聚焦时使用的颜色是第一行&lt;item android:color="?attr/colorPrimary" android:state_focused="true"/&gt;

在您的代码中使用(删除EditText 中的app:backgroundTint

    <com.google.android.material.textfield.TextInputLayout
        android:hint="@string/email"
        android:theme="@style/EditTextHintWhite"
        ..>

        <com.google.android.material.textfield.TextInputEditText
            android:inputType="textEmailAddress"
            android:maxLines="1"
            android:textColor="@color/white"
            ../>

    </com.google.android.material.textfield.TextInputLayout>

with(删除父级):

  <style name="EditTextHintWhite">
    <item name="colorError">@color/white</item>
    <item name="colorPrimary">@color/...</item>
    <item name="colorOnSurface">@color/...</item>
  </style>

如果您想要自定义下划线,请使用 TextInputLayout 中的 app:boxStrokeColor="@color/text_input_layout_stroke_color" 属性。

注意:使用com.google.android.material.textfield.TextInputEditText 而不是androidx.appcompat.widget.AppCompatEditText

【讨论】:

  • 我做了你所有的建议,但它仍然不起作用。是否有理由使用com.google.android.material.textfield.TextInputEditText 而不是androidx.appcompat.widget.AppCompatEditText
  • TextInputEditTex 被设计用作com.google.android.material.textfield.TextInputLayout 的子代,它扩展了AppCompatEditText。为什么在EditText 中使用app:backgroundTint?无论如何,我刚刚尝试过并且有效。检查你的风格。
  • 你使用的是 1.1.0-beta01 吗?
  • 如果您的意思是 1.1.0-beta01 是您所说的 com.google.android.material 依赖项,那么是的,我也尝试了 1.0.0 但它没有任何区别。我刚刚复制了你的确切代码,除了颜色值
  • @philip 在您的代码中有些东西不起作用。只需使用带有 boxStrokeColor 的简单 TIL 尝试一个空项目。我也用你的代码更新了答案,但改变了一些东西。它有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 2016-11-14
  • 1970-01-01
  • 2019-08-22
  • 2019-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多