使用 TextInputLayout 时更改 EditText 提示颜色

Change EditText hint color when using TextInputLayout

我正在使用设计库中的新 TextInputLayout。我能够让它显示并更改浮动标签的颜色。不幸的是,实际的 EditText 提示现在总是白色的。

我已尝试更改 XML 中的 hintColor、样式和编程方式,还尝试使用 android.support.v7.widget.AppCompatEditText 但是 EditText 提示总是显示白色。

这是我的 XML 我的 TextInputLayoutEditText

<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>

我不确定是什么原因导致您的问题,但这段代码对我来说非常适用。我认为这与使用正确的 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>

看起来父视图具有导致 EditText 为白色的第 3 方库的样式。

android:theme="@style/com_mixpanel_android_SurveyActivityTheme"

删除后一切正常。

在您的应用程序主题中定义 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>

Source


或者, 在您的布局中,例如:

<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">

试试这个可能会有帮助

      edittext.addTextChangedListener(new  TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), "onTextChanged", 2000).show();;
            //newuser.setTextColor(Color.RED);
            edittext.setHintTextColor(Color.RED);

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), "afterTextChanged", 2000).show();;

        }
    });
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Name"
                android:textColor="@color/black"
                android:textColorHint="@color/grey"/>
        </android.support.design.widget.TextInputLayout>

使用 textColorHint 设置您想要的颜色作为 EditText 的提示颜色。问题是 EditText 中的提示不会在您键入内容时消失,而是在 EditText 获得焦点时立即消失(带有很酷的动画)。当您将焦点移开并转到 EditText 时,您会清楚地注意到这一点。

参考下面的代码me.But它会影响你所有的控件颜色。

 <!-- 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>

遇到了同样的问题。通过将这些行放在 parent 主题中解决。

 <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>

以单独的样式应用到TextInputLayoutEdittext 它不会出现。您必须将它放在应用程序的父主题中。

在包含 EditText 的 TextInputLayout 中,添加:

android:textColorHint="someColor"

在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>

希望这有效

据此: https://code.google.com/p/android/issues/detail?id=176559

试试这个:

<android.support.design.widget.TextInputLayout
    android:textColorHint="#A7B7C2"
    android:layout_width="match_parent"
    android:layout_height="50dp">

    <EditText
        android:id="@+id/et_confirm_password"
        android:textColor="@android:color/black"
        android:hint="Confirm password"
        android:inputType="textPassword"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
 </android.support.design.widget.TextInputLayout>

适用于 23.1.1

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

android:textColorHint="#F6F6F6"

或您想要的任何颜色

android:textColorHint="#FFFFFF" 有时有效,有时无效。对我来说,下面的解决方案非常有效

尝试在您的 XML 文件中使用下面的代码,TextLabel 主题在 style.xml

中定义
 <android.support.design.widget.TextInputLayout
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:theme="@style/MyTextLabel">

     <EditText
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:hint="Floating Label"
         android:id="@+id/edtText"/>

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

样式文件夹中的文本标签代码

 <style name="MyTextLabel" parent="TextAppearance.AppCompat">
    <!-- Hint color and label color in FALSE state -->
    <item name="android:textColorHint">@color/Color Name</item> 
<!--The size of the text appear on label in false state -->
    <item name="android:textSize">20sp</item>
    <!-- Label color in TRUE state and bar color FALSE and TRUE State -->
    <item name="colorAccent">@color/Color Name</item>
    <item name="colorControlNormal">@color/Color Name</item>
    <item name="colorControlActivated">@color/Color Name</item>
 </style>

如果您只是想在 false 状态下更改标签的颜色,则不需要 colorAccent 、 colorControlNormal 和 colorControlActivated

<item name="colorAccent">@android:color/black</item>

在主题中将您的 colorAccent 更改为您想要的颜色,这将更改您的 EditText 行、光标以及您的提示

或者您也可以在 style.xml

中包含此样式
<style name="TextLabel" parent="TextAppearance.AppCompat">
    <!-- Hint color and label color in FALSE state -->
    <item name="android:textColorHint">@android:color/black</item>
    <item name="android:textSize">20sp</item>
    <!-- Label color in TRUE state and bar color FALSE and TRUE State -->
    <item name="colorAccent">@android:color/black</item>
    <item name="colorControlNormal">@android:color/black</item>
    <item name="colorControlActivated">@android:color/black</item>
</style>

然后在您的 TextInputLayout 中,您可以这样放置它

<android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/TextLabel">
            <EditText
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:drawableLeft="@drawable/password"
                android:drawableStart="@drawable/password"
                android:maxLines="1"
                android:hint="password"
                android:inputType="textWebPassword" />

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

您必须在 TextInputLayout 上设置提示颜色。

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

android:textColorHint="#000000"

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

你可以在里面使用 android:textColorHint="@color/color_black" TextInputlayout 它对我有用。

<android.support.design.widget.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/dp_10"
                android:textColorHint="@color/color_black"
                app:hintTextAppearance="@style/TextLabel">

                <EditText
                    android:id="@+id/et_state"
                    style="@style/profile_editTextStyle"

                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/billingState"
                    android:text="@string/billingState"
                     />
            </android.support.design.widget.TextInputLayout>
 <android.support.design.widget.TextInputLayout
        android:id="@+id/input_layout_passdword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColorHint="#d3d3d3">
        <EditText
            android:id="@+id/etaddrfess_ciwty"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent"
            android:bottomLeftRadius="10dp"
            android:bottomRightRadius="50dp"
            android:fontFamily="@font/frutiger"
            android:gravity="start"
            android:hint="@string/address_city"
            android:padding="10dp"
            android:textColor="#000000"
            android:textColorHint="#000000"
            android:textSize="14sp"
            android:topLeftRadius="10dp"
            android:topRightRadius="10dp" />
    </android.support.design.widget.TextInputLayout>``

试试下面的代码:

高光颜色为白色:

 <android.support.design.widget.TextInputLayout
        android:id="@+id/input_layout_mobile"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/TextStyle"
        >

        <EditText
            android:id="@+id/input_mobile"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:drawablePadding="14dp"
            android:drawableLeft="8dp"
            android:textColor="@color/white"
            android:hint="Mobile" />
    </android.support.design.widget.TextInputLayout>

样式:TextStyle

    <style name="TextStyle" parent="TextAppearance.AppCompat">
    <!-- Hint color and label color in FALSE state -->
    <item name="android:textColorHint">@color/white</item>
    <item name="android:textSize">20sp</item>
    <!-- Label color in TRUE state and bar color FALSE and TRUE State -->
    <item name="colorAccent">@color/white</item>
    <item name="colorControlNormal">@color/white</item>
    <item name="colorControlActivated">@color/white</item>
     </style>

晚了,但它可能会帮助我这样做的人

<android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_marginLeft="30dp"
        android:layout_marginStart="30dp"
        android:textColorHint="#8cffffff">

        <android.support.v7.widget.AppCompatEditText
            android:id="@+id/email_edit"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/security_email"
            android:inputType="textEmailAddress"
            android:textColor="@color/white"
            app:backgroundTint="#8cffffff" />
    </android.support.design.widget.TextInputLayout>

这是我对这个类似问题的经验和所需的解决方案。

要求:

  • 需要创建自定义 TextInputEditText(可以说有些应该是透明的,有些应该不是,但为各种事件使用自定义颜色)

面临的问题:

  • android:textColorHint 未按要求工作。

尝试过的解决方案失败了:

  • android:textColorHint 风格使用并应用于 TextInputEditText。没有结果或差异。
  • 在应用程序的主题中设置android:textColorHint。它确实有帮助,但现在已为整个应用程序设置。 (不是 up-to 标记要求)

经过大量的 RnD,找到的最佳解决方案是在一篇描述我们需要将 theme 应用到 TextInputLayout 或它是父视图,而不是仅将 style 应用于 TextInputEditText 或其父视图。

请检查TextInputLayout proper Theming 告诉我们怎么走错路了。

Material Components library you can customize the TextInputLayout提示文字颜色使用:

  • 布局中:

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

类似于:

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

当我尝试将主题属性设置为 TextInputLayout 时,主题也被应用到它的子视图 edittext,这是我不想要的。

所以对我有用的解决方案是将自定义样式添加到 TextInputLayout 的 "app:hintTextAppearance" 属性。

在styles.xml中添加如下样式:

<style name="TextInputLayoutTextAppearance" parent="TextAppearance.AppCompat">
    <item name="android:textColor">@color/text_color</item>
    <item name="android:textSize">@dimen/text_size_12</item>
</style>

并将此样式应用于 TextInputLayout 的 "app:hintTextAppearance" 属性,如下所示:

<com.google.android.material.textfield.TextInputLayout
        android:id="@+id/mobile_num_til"
        android:layout_width="0dp"
        android:layout_height="@dimen/dim_56"
        app:layout_constraintStart_toStartOf="@id/title_tv"
        app:layout_constraintEnd_toEndOf="@id/title_tv"
        app:layout_constraintTop_toBottomOf="@id/sub_title_tv"
        android:layout_marginTop="@dimen/dim_30"
        android:padding="@dimen/dim_8"
        app:hintTextAppearance="@style/TextInputLayoutTextAppearance"
        android:background="@drawable/rect_round_corner_grey_outline">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/mobile_num_et"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:hint="@string/mobile_number"
            android:gravity="center_vertical"
            android:background="@android:color/transparent"/>

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

如果您使用的是新的 androidx Material 设计库 com.google.android.material 然后你可以使用 colorstatelist 来控制焦点,悬停和默认状态下的提示文本颜色,如下所示。 (灵感来自

res/color/text_input_box_stroke.xml 中输入如下内容:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#fcc" android:state_focused="true"/>
    <item android:color="#cfc" android:state_hovered="true"/>
    <item android:color="#ccf"/>
</selector>

然后在你的 styles.xml 中你会输入:

<style name="MtTILStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
    <item name="boxStrokeColor">@color/text_input_box_stroke</item>
    <item name="hintTextColor">@color/text_input_box_stroke</item>
</style>

最后在实际中表明你的风格TextInputLayout 出于某种原因,您还需要为提示的默认文本颜色设置 android:textColorHint

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/my_layout_id"
    style="@style/LoginTextInputLayoutStyle"
    android:textColorHint="#ccf"
    ...

来自文档:

The hint should be set on the TextInputLayout, rather than the EditText. If a hint is specified on the child EditText in XML, the TextInputLayout might still work correctly; TextInputLayout will use the EditText's hint as its floating label. However, future calls to modify the hint will not update TextInputLayout's hint. To avoid unintended behavior, call setHint(CharSequence) and getHint() on TextInputLayout, instead of on EditText.

尝试在 TextInputLayout 而不是 TextInputEditText 上设置 android:hintapp:hintTextColor

如果您使用的是 Material 设计库。目前,我使用的版本

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

1 - 设置 TextInputLayout 静止时的颜色。

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

2 - 当 TextInputLayout 为 floating/focused/tapped 时设置颜色。

<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>

我只是想在标签提升到顶部时更改标签颜色。但是设置 textColorHint 会改变每个状态的颜色。所以,这对我有用:

   <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
       ...
        <item name="colorControlActivated">@color/colorPrimary</item>
       ...
    </style>

这将在输入聚焦时改变颜色。

使用TextInputLayout.setDefaultHintTextColor

这里是 google material 文本输入布局的完整定制。这可能对你有帮助

<com.google.android.material.textfield.TextInputLayout
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginHorizontal="@dimen/_24sdp"
        android:layout_marginTop="@dimen/_24sdp"
        android:hint="@string/username"
        android:textColorHint="@color/tint"
        app:hintEnabled="true"
        app:hintAnimationEnabled="false"
        app:startIconDrawable="@drawable/ic_user"
        app:startIconTint="@color/tint"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/guideline"
        app:boxCornerRadiusBottomEnd="@dimen/_45sdp"
        app:boxCornerRadiusBottomStart="@dimen/_45sdp"
        app:boxCornerRadiusTopEnd="@dimen/_45sdp"
        app:boxCornerRadiusTopStart="@dimen/_45sdp"
        app:boxStrokeColor="@color/red"
        app:boxStrokeWidth="@dimen/_1sdp"
        <!-- for password 
        app:passwordToggleEnabled="true"
        app:passwordToggleTint="@color/tint" -->
        >
        <com.google.android.material.textfield.TextInputEditText 
            android:layout_width="match_parent" 
            android:layout_height="@dimen/_40sdp" 
            android:padding="0dp" 
            android:fontFamily="@font/poppins_medium" 
            android:textColor="@color/black" 
            android:inputType="textEmailAddress"/>
    </com.google.android.material.textfield.TextInputLayout>