使用TextInputLayout时更改EditText提示颜色


146

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

我尝试过以XML,样式和编程方式更改hintColor,也尝试使用,android.support.v7.widget.AppCompatEditTextEditText提示始终显示为白色。

下面是我的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>

我正面临着同样的错误。触摸任何editText之后,提示始终始终为“白色”颜色,它采用您定义的颜色。仍在搜索修复程序。
ch3tanz 2015年

您是否尝试过@Ali Kabiri的答案。看来这是比我更好的解决方案。我的项目非常具体。
SamIAmHarris 2015年

我有我的自定义主题,所有颜色均在style.xml中定义
ch3tanz 2015年

Answers:


164

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>

资源


@TheHungryAndroider是否在使用编辑文本的地方将主题设置为活动主题?
mbelsky

1
它适用于我,但提示的颜色未在片段和视图创建时设置,我必须单击我EditText的提示,才能在视图内的所有输入上设置提示颜色...尚未找到解决方法(requestFocus()performClick()不幸的是不要做这个把戏)。
瑕疵的

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

75

在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文件中,添加主题属性,如下所示

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

希望这有效


4
显示“错误夸大类EditText”。请帮忙 !
Mohit Khaitan

@Coder他添加的一些属性适用于21岁以上
-O先生

49

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

android:textColorHint="#F6F6F6"

或您想要的任何颜色


41

有同样的问题。通过将这些行放在主题中来解决。

 <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,它将不会出现。您HAVE把它放在应用程序的父主题。


3
不能使用此小部件在应用程序中具有多种输入样式确实令人沮丧,但据我所知您是对的。:/
Turnsole

4
好吧,没有必要在整个应用程序中都使用它。您只能将此主题应用于清单文件中的一项活动。为其余的活动创建另一个主题。
RexSplode 2015年

23

我不确定是什么原因导致您的问题使此代码对我来说完美地工作。我认为这与使用正确的xml名称空间(xmlns)有关。我不确定是否支持使用不带xml名称空间属性的android.support.design。或者它与textColorHint您在EditText本身上使用的属性有关。

布局:

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

2
这仍然像我一样。我遇到的问题是,在用户触摸EditText之前,EditText颜色为白色。当用户触摸EditText时,TextInputLayout标签为绿色,并且工作正常。
SamIAmHarris 2015年

@ user3520299这里有同样的问题,找到解决办法的运气好吗?
AhmedW

我的案例很独特,因为父视图的主题集引起了问题。但我把现在的代码工作正常,我删除后一个主题
SamIAmHarris

1
这适用于浮动提示,但不适用于空EditText控件内的提示。为此,请按照@mbelsky的答案
Richard Le Mesurier

顺便说一句,默认的应用程序: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>

这应该被接受-它显示了哪些属性用于每个重要元素。
理查德·勒·马修里尔


14

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

android:textColorHint =“#000000”

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

10

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>

在样式文件夹TextLabel代码中

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

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


10

您可以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>

8

据此: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


6

使用Material Components库,您可以TextInputLayout使用以下方法自定义提示文本的颜色:

  • 在布局中:

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

就像是:

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

在此处输入图片说明在此处输入图片说明


5

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

android:theme="@style/com_mixpanel_android_SurveyActivityTheme"

一旦删除此文件,一切正常。


5

试试这个可能有帮助

      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();;

        }
    });

为什么将它放在onTextChanged侦听器中?
user25

5

迟了,但可能会帮助我这样的人

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

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

3
        <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时,您会清楚地注意到这一点。


3

从文档中:

提示应该在TextInputLayout而不是EditText上设置。如果在子EditText上以XML指定了提示,则TextInputLayout可能仍然可以正常工作;TextInputLayout将使用EditText的提示作为其浮动标签。但是,将来调用该提示时将不会更新TextInputLayout的提示。为避免意外行为,请在TextInputLayout而不是EditText上调用setHint(CharSequence)和getHint()。

尝试将android:hint和设置为app:hintTextColoron TextInputLayout而不是on TextInputEditText



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

0

请尝试以下代码:

高光颜色为白色:

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

0

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

需求:

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

面临的问题:

  • android:textColorHint 不能按要求工作。

尝试的解决方案失败了:

  • 用于android:textColorHint样式并应用于TextInputEditText。没有结果或差异。
  • android:textColorHint在应用程序的主题中设置。它确实有帮助,但现在已针对整个应用程序进行了设置。(不符合要求)

经过大量RnD,找到的最佳解决方案是在一篇文章中,该文章描述了我们需要将主题应用于TextInputLayout父视图或父视图,而不是仅将样式应用于TextInputEditText父视图。

请检查TextInputLayout正确的主题该主题告诉我们我们走错了路。


0

当我尝试将主题属性设置为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>

0

如果您使用的是新的androidx材质设计库,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"
    ...

0

如果您正在使用材料设计库。目前,我正在使用该版本

实施'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>

0

我只想在将标签抬高到顶部时更改标签颜色。但是设置会textColorHint更改每种状态的颜色。因此,这为我工作:

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.