使用 TextInputLayout 时更改 EditText 提示颜色

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

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

这是我的 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>
283008 次浏览

我不知道是什么原因导致你的问题把这个代码完全为我工作。我认为这与使用正确的 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 为白色。

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>

来源


或者,在你的布局中,比如:

<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 的 Hint 颜色。问题是,EditText 中的提示不是在您键入某些内容时消失,而是在 EditText 获得焦点时立即消失(通过一个很酷的动画)。当您将焦点切换到 EditText 时,您会清楚地注意到这一点。

请参考下面的代码,它为我工作。但它会影响你所有的控件颜色。

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

得到了同样的问题。解决了把这些线在 家长的主题。

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

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

或者任何你想要的颜色

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

在你的主题中改变你想要的颜色,这会改变你的编辑文本行,光标以及你的提示

或者您也可以在 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 上设置提示颜色。

答案很多,但只需要一句话:

TextColorHint = “ # 000000”

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

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

<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。它确实有帮助,但现在它被设置为整个应用程序。(不符合要求)

经过大量的 RnD,最好的解决方案是在一篇文章中发现,我们需要应用 主题TextInputLayout或它的父视图,而不是只应用 风格TextInputEditText或它的父视图。

请检查 正确的主题告诉我们如何在错误的轨道。

使用 材料组件库,你可以自定义 TextInputLayout的提示文本颜色,使用:

  • 在布局中:

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

比如:

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

enter image description hereenter image description here

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

因此,对我来说有效的解决方案是向 TextInputLayout 的“ app: hintTextApplicance”属性添加一个自定义样式。

在 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: hintText卖相”属性,如下所示:

<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 材料设计库 com.google.android.material 然后您可以使用 color statelist 来控制聚焦状态、悬停状态和默认状态下的提示文本颜色,如下所示。(灵感来自 这个)

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

根据文件:

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

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

如果你正在使用材质设计库。目前,我正在使用的版本

实现‘ com.google.android.Materials: Materials: 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>

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

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

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

使用 TextInputLayout.setDefaultHintTextColor

这里是完全自定义的谷歌材料文本输入布局。这可能对你有帮助

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

这应该100% 有效

android:textColorHint="@color/white"