问题
I am using the new TextInputLayout
from the design library. I am able to get it to show and to change the color of the floating label. Unfortunately the actual EditText
hint is now always white.
I have tried changing the hintColor in XML, styles, and programmatically and also tried using the android.support.v7.widget.AppCompatEditText
but the EditText
hint always shows white.
Here is my XML for my TextInputLayout
and EditText
<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>
And here is the style I am using for the TextInputLayout
(I tried making the hintTextColor
attribute black but didn't do anything for me):
<style name="GreenTextInputLayout" parent="@style/TextAppearance.AppCompat">
<item name="android:textColor">@color/homestory_green</item>
</style>
回答1:
Define android:textColorHint
in your application theme:
<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
回答2:
Create custom style in 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>
Then in your layout xml file, add theme attribute as below
<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>
hope this works
回答3:
Add textColorHint property to your edit text
android:textColorHint="#F6F6F6"
or whichever color you want
回答4:
got the same problem. Resolved by putting these lines in parent theme.
<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>
If you put these
<item name="android:textColorHint">@color/BackgroundtWhiteColor</item>
<item name="colorControlNormal">@color/BackgroundtWhiteColor</item>
<item name="colorControlActivated">#ff0000</item>
<item name="colorControlHighlight">@color/BackgroundtWhiteColor</item>
in a separate style and apply it to TextInputLayout or Edittext it won't appear. You HAVE to place it in application's parent theme.
回答5:
I'm not sure what causes your problem put this code works perfectly for me. I think it has something to do with using the correct xml namespace (xmlns
). I'm not sure if using android.support.design without xml namespace attribute is supported. Or it has something to do with the textColorHint
attribute you are using on the EditText itself.
Layout:
<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:
<style name="GreenTextInputLayout" parent="@android:style/TextAppearance">
<item name="android:textColor">#00FF00</item>
</style>
回答6:
Refer the below code it worked for me.But it will affect all your controls color.
<!-- 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>
回答7:
In the TextInputLayout that holds the EditText, add:
android:textColorHint="someColor"
回答8:
A lot answers but need only a line for this:
android:textColorHint="#000000"
<EditText
android:id="@+id/edtEmail"
android:textColorHint="#000000"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
回答9:
android:textColorHint="#FFFFFF" sometime works and sometime doesnt. For me below solution works perfectly
Try The Below Code It Works In your XML file and TextLabel theme is defined in 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>
In Styles Folder TextLabel Code
<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>
If you just want to change the color of label in false state then colorAccent , colorControlNormal and colorControlActivated are not required
回答10:
You can use android:textColorHint="@color/color_black"
inside TextInputlayout
It worked for me.
<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>
回答11:
According to this: https://code.google.com/p/android/issues/detail?id=176559
Try this:
<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>
It works in 23.1.1
回答12:
Looks like the parent view had a style for a 3rd party library that was causing the EditText to be white.
android:theme="@style/com_mixpanel_android_SurveyActivityTheme"
Once I removed this everything worked fine.
回答13:
try this may this help
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();;
}
});
回答14:
<item name="colorAccent">@android:color/black</item>
change your colorAccent to your desired color inside your Theme,this will change your EditText line,Cursor as well as your hint
or you can also include this style inside your 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>
then inside your TextInputLayout you can put it like this
<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>
回答15:
<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>
Use textColorHint to set the color that you want as the Hint color for the EditText. The thing is that Hint in the EditText disappears not when you type something, but immediately when the EditText gets focus (with a cool animation). You will notice this clearly when you switch focus away and to the EditText.
回答16:
late but it may help someone i have done like this
<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>
回答17:
With the Material Components library you can customize the TextInputLayout the hint text color using:
In the layout:
app:hintTextColor
attribute : the color of the label when it is collapsed and the text field is activeandroid:textColorHint
attribute: the color of the label in all other text field states (such as resting and disabled)
Something like:
<com.google.android.material.textfield.TextInputLayout
app:hintTextColor="@color/mycolor"
android:textColorHint="@color/text_input_hint_selector"
.../>
回答18:
You must set hint color on TextInputLayout.
回答19:
<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>``
回答20:
Try code below:
The high light color is White:
<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>
style: 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>
回答21:
Here is my experience with this similar issue & the required solution.
Requirement:
- Need to create customize
TextInputEditText
(can say some should be transparent and some should be not but use custom colors for various events)
Problem faced:
android:textColorHint
is not working as required.
Solutions tried, which failed:
- Used
android:textColorHint
in style and applied toTextInputEditText
. No results or difference. - Set
android:textColorHint
in application's theme applied. It do helped but it was now set for entire application. (Not up-to mark to requirement)
After a lot of RnD, the best SOLUTION found was in an article which described that we need to apply theme to TextInputLayout
or to it's parent view rather then only applying style to TextInputEditText
or to it's parent view.
Please check TextInputLayout proper Theming which told that how we are at wrong track.
回答22:
When I tried to set theme attribute to TextInputLayout, the theme was also getting applied to its child view edittext, which I didn't wanted.
So the solution which worked for me was to add a custom style to the "app:hintTextAppearance" property of the TextInputLayout.
In styles.xml add the following style:
<style name="TextInputLayoutTextAppearance" parent="TextAppearance.AppCompat">
<item name="android:textColor">@color/text_color</item>
<item name="android:textSize">@dimen/text_size_12</item>
</style>
And apply this style to the "app:hintTextAppearance" property of the TextInputLayout as below:
<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>
来源:https://stackoverflow.com/questions/30824009/change-edittext-hint-color-when-using-textinputlayout