编程更改TextInputLayout的聚焦和非聚焦提示颜色

11

我想要改变文本输入布局中提示文字的颜色,使得在焦点状态和非焦点状态下颜色保持一致。我有两个文本输入布局字段,它们的颜色相同。但是在焦点状态下会显示指定颜色,而在非焦点状态下会显示默认的灰色。我希望在焦点和非焦点状态下提示文字的颜色保持一致。

   <com.example.viveka.snipeid.CustomTextInputLayout
        android:id="@+id/input_layout_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        app:errorEnabled="true"
        >
    <EditText
        android:id="@+id/editEmail"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:hint="email / snipe id"
        android:digits="abcdefghijklmnopqrstuvwxyz.@0123456789"
        android:textAllCaps="false"
        android:textSize="12sp"
        android:layout_marginLeft="-4dp"
        android:textColor="@color/lightgray"
        android:textColorHint="@color/primary"/>
    </com.example.viveka.snipeid.CustomTextInputLayout>

期望的图片 输入图片描述 我得到的图片 输入图片描述

我需要将两个字段变成相同的颜色。


嗨,用户8367573,你可以试试我的方法。它可以使两个提示颜色相同。 - KeLiuyue
嗨KeLiuye,我现在更新了图片。 - user8367573
你必须在电子邮件行和密码行中添加TextInputLayout - KeLiuyue
嗨,user8367573,我更新了android:textColor="#FF0000"。它可以改变文本颜色。 - KeLiuyue
这是工作解决方案: Kotlin版本 - Sergey Rusak
4个回答

4
您可以通过使用材料设计的 TextInputLayout ,并添加 textColorHint 和 hintTextColor 属性来轻松实现,这种方法非常完美。
  <com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
          android:textColorHint="@color/gray"
        app:hintTextColor="@color/gray"
     
       >

1
救了我的一天,谢谢你。 - Arda Kazancı

1
你可以像这样做。 android:textColorHint="#FF0000" 是EditText的提示颜色。
如果您想要文本颜色和提示颜色一样。
您可以在EditText中更改android:textColor="#FF0000"
您可以添加app:errorTextAppearance="@style/text_in_layout_error_hint_Style"来更改错误文本颜色。
<com.example.viveka.snipeid.CustomTextInputLayout
    android:id="@+id/input_layout_name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="15dp"
    android:textColorHint="#FF0000"
    app:errorTextAppearance="@style/text_in_layout_error_hint_Style"
    app:hintTextAppearance="@style/text_in_layout_hint_Style"
    app:errorEnabled="true">

    <EditText
        android:id="@+id/editEmail"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginLeft="-4dp"
        android:digits="abcdefghijklmnopqrstuvwxyz.@0123456789"
        android:hint="email / snipe id"
        android:textAllCaps="false"
        android:textColor="#FF0000"
        android:textColorHint="@color/primary"
        android:textSize="12sp"/>
</com.example.viveka.snipeid.CustomTextInputLayout>

"

LEFT-TOP提示颜色取决于app:hintTextAppearance="@style/text_in_layout_hint_Style"

样式代码如下:

"
<style name="text_in_layout_hint_Style">
    <item name="android:textColor">#FF0000</item>
    <item name="android:textSize">12sp</item>
</style>

添加错误文本样式。
 <style name="text_in_layout_error_hint_Style">
    <item name="android:textColor">#00ff00</item>
    <item name="android:textSize">12sp</item>
</style>

像这样: 在此输入图片描述 希望能帮到你。


@KeLiuye,这很完美。但是我想在出现错误时改变颜色...颜色将会变成绿色。例如:如果我在不填写两个字段的情况下点击登录,那么无论是禁用还是聚焦状态,颜色都会变成绿色... - user8367573
@user8367573,你可以添加app:errorTextAppearance="@style/text_in_layout_error_hint_Style"来改变错误文本的颜色。 - KeLiuyue

0
在新的材料主题中,当未聚焦时,提示颜色是colorOnSurface属性的染色版本。当聚焦时,它是colorPrimary。

0
创建一个 selector_text_input_layout_hint_color.xml 文件(例如)。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/colorWhenFocus" android:state_focused="true"/>
    <item android:color="@color/colorWhenNotFocus" android:state_focused="false"/>
</selector>

在文本输入布局中设置下一个属性:

android:textColorHint="@color/selector_text_input_layout_hint_color"

感谢:https://medium.com/@fast3r/this-is-brilliant-martin-thank-you-very-much-6c4a43a65df4

就这样。对我来说很有效 ;)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接