当使用TextInputLayout时更改EditText提示文本的颜色

185

我正在使用设计库中的新TextInputLayout。我成功地让它显示并改变了浮动标签的颜色,但是输入框的提示文字始终是白色。我已尝试在XML、样式和程序上更改hintColor,并尝试使用android.support.v7.widget.AppCompatEditText,但是输入框的提示文字仍然是白色。

这是我TextInputLayoutEditText的XML代码:

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android.support.design:hintTextAppearance="@style/GreenTextInputLayout">


    <EditText

    android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/city"
        android:textColorHint="@color/black"
        android:hint="@string/city" />

</android.support.design.widget.TextInputLayout>

这是我用于TextInputLayout的样式(我尝试将hintTextColor属性设为黑色,但对我没有任何影响):

<style name="GreenTextInputLayout" parent="@style/TextAppearance.AppCompat">
    <item name="android:textColor">@color/homestory_green</item>
</style>
28个回答

194

在应用程序主题中定义android:textColorHint

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>

    <item name="android:textColorHint">@color/secondary_text</item>
</style>

来源


或者,在您的布局中,像这样:

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android.support.design:hintTextAppearance="@style/GreenTextInputLayout"
    android:textColorHint="@color/secondary_text">

1
它对我有效,但是在片段和视图创建时提示的颜色没有设置,我必须点击我的EditText才能在视图中的所有输入上设置提示颜色...尚未找到任何解决方法(requestFocus()performClick()不起作用)。 - Mickäel A.
1
当作为属性使用时有效:
<EditText android:inputType="textMultiLine" android:lines="4" android:gravity="top|right" android:layout_width="fill_parent" android:layout_height="match_parent" android:hint="提示文本" android:textColorHint="#919389" />
- masoud Cheragee
问题在于,如果设置了colorControlActivated,它将覆盖textColorHint。 - 6rchid

82

在style.xml中创建自定义样式

<style name="EditTextHint" parent="TextAppearance.AppCompat">
    <item name="colorAccent">@android:color/white</item>
    <item name="android:textColorHint">@color/BackgroundtWhiteColor</item>
    <item name="colorControlNormal">@color/BackgroundtWhiteColor</item>
    <item name="colorControlActivated">@color/your color</item>
    <item name="colorControlHighlight">@color/BackgroundtWhiteColor</item>
</style>

然后在你的布局 XML 文件中,按照以下方式添加 theme 属性

 <android.support.design.widget.TextInputLayout
            android:theme="@style/EditTextHint"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

      <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

</android.support.design.widget.TextInputLayout>

希望这能起作用。


5
显示“Error inflating class EditText”。请帮忙! - Mohit Khaitan
@Coder 添加的一些属性是针对21岁及以上的。 - Mr.O

61

将textColorHint属性添加到您的编辑文本中

android:textColorHint="#F6F6F6"

或者你想要的任何颜色


42

我遇到了同样的问题。将以下代码添加到父主题中解决了问题。

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/ColorPrimaryDark</item>
    <item name="colorPrimaryDark">@color/ColorPrimaryDark</item>
    <item name="colorAccent">@color/AccentColor</item>
    <item name="android:windowTranslucentStatus">true</item>

    <item name="android:textColorHint">@color/BackgroundtWhiteColor</item>
    <item name="colorControlNormal">@color/BackgroundtWhiteColor</item>
    <item name="colorControlActivated">#ff0000</item>
    <item name="colorControlHighlight">@color/BackgroundtWhiteColor</item>
    <!-- Customize your theme here. -->
</style>
如果您将这些放置
<item name="android:textColorHint">@color/BackgroundtWhiteColor</item>
<item name="colorControlNormal">@color/BackgroundtWhiteColor</item>
<item name="colorControlActivated">#ff0000</item>
<item name="colorControlHighlight">@color/BackgroundtWhiteColor</item>

如果你将样式定义在其他地方并应用于TextInputLayout或者Edittext中,它不会出现。你必须将其放置在应用程序的父级主题中。


40

使用Material Components库,你可以通过以下方式自定义TextInputLayout的提示文本颜色:

  • 在布局中:

    • app:hintTextColor属性:标签在折叠时和文本字段处于活动状态时的颜色
    • android:textColorHint属性:所有其他文本字段状态(如休息和禁用)中标签的颜色

例如:

<com.google.android.material.textfield.TextInputLayout
     app:hintTextColor="@color/mycolor"
     android:textColorHint="@color/text_input_hint_selector"
     .../>

输入图像描述输入图像描述


1
这正是我一直在寻找的。管理提示文本状态的简单方法!太棒了!但是我无法在样式中声明app:hintTextColor,只能在布局中声明。 - sud007
1
刚刚想到,也可以在样式中声明<item name="hintTextColor">@color/lsHintTextColor</item> - sud007

23
我不确定是什么原因导致了您的问题,但这段代码在我的设备上运行得很好。我认为它可能与正确使用XML名称空间(xmlns)有关。我不确定是否支持在没有XML名称空间属性的情况下使用android.support.design。或者可能与您在EditText中使用的textColorHint属性有关。
布局:
<android.support.design.widget.TextInputLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp"
    app:hintTextAppearance="@style/GreenTextInputLayout">

    <android.support.v7.widget.AppCompatEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="test"
        android:inputType="text" />
</android.support.design.widget.TextInputLayout>

样式:

<style name="GreenTextInputLayout" parent="@android:style/TextAppearance">
    <item name="android:textColor">#00FF00</item>
</style>

3
这还像我以前的一样有效。我遇到的问题是,当用户未触摸EditText时,EditText的颜色为白色。当用户触摸EditText时,TextInputLayout标签变为绿色并正常工作。 - SamIAmHarris
1
这适用于浮动提示,但不适用于空EditText控件内的提示。为此,请根据@mbelsky的答案更新应用程序主题。 - Richard Le Mesurier
顺便提一下,默认的app:hintTextAppearance样式是@style/TextAppearance.Design.Hint,因此您可能希望将其用作您的“parent”,而不是@android:style/TextAppearance@style/TextAppearance.AppCompat - rockgecko

19

参考下面的代码,它对我有效。但它将影响您所有控件的颜色。

 <!-- In your style.xml file -->
    <style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
            <!--EditText hint color-->
            <item name="android:textColorHint">@color/default_app_white</item>
           <!-- TextInputLayout text color-->
            <item name="colorControlActivated">@color/default_app_green</item>
            <!-- EditText line color when EditText on-focus-->
            <item name="colorControlHighlight">@color/default_app_green</item>
            <!-- EditText line color when EditText  in un-focus-->
            <item name="colorControlNormal">@color/default_app_white</item>
        </style>

16
在包含EditText的TextInputLayout中,添加以下内容:
android:textColorHint="someColor"

14

如果您正在使用Material设计库。当前,我正在使用版本

implementation 'com.google.android.material:material:1.3.0-alpha01'

1-当TextInputLayout处于静止状态时设置颜色。

<item name="android:textColorHint">@color/your_color_hint</item>

2 - 当TextInputLayout浮动/聚焦/点击时设置颜色。

<item name="hintTextColor">@color/your_color_floating_hint</item>

3-设置TextInputLayout下划线的颜色。

<item name="boxStrokeColor">@color/TextViewColor_line</item>

4 - 设置 TextInputLayout 中错误文本的颜色。

<item name="boxStrokeErrorColor">@color/colorPrimary</item>

14

许多答案,但只需要一行:

android:textColorHint="#000000"

    <EditText
        android:id="@+id/edtEmail"
        android:textColorHint="#000000"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

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