我正在使用设计库中的新TextInputLayout
。我可以让它显示并更改浮动标签的颜色。不幸的是,实际的EditText
提示现在总是白色的。
我尝试过以XML,样式和编程方式更改hintColor,并尝试使用android.support.v7.widget.AppCompatEditText
但EditText
提示始终显示为白色。
以下是我的TextInputLayout
和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>
这是我用于TextInputLayout
的样式(我尝试将hintTextColor
属性设为黑色,但没有为我做任何事情):
<style name="GreenTextInputLayout" parent="@style/TextAppearance.AppCompat">
<item name="android:textColor">@color/homestory_green</item>
</style>
答案 0 :(得分:144)
在应用主题中定义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>
答案 1 :(得分:64)
在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>
希望这有效
答案 2 :(得分: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 ,它将不会出现。您已将其置于应用程序的父主题中。
答案 3 :(得分:41)
将textColorHint属性添加到编辑文本
android:textColorHint="#F6F6F6"
或任何你想要的颜色
答案 4 :(得分:18)
我不确定是什么导致你的问题,这个代码对我来说非常合适。我认为它与使用正确的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>
答案 5 :(得分:17)
请参考下面对我工作的代码。但它会影响您的所有控件颜色。
<!-- 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>
答案 6 :(得分:11)
在包含EditText的TextInputLayout中,添加:
android:textColorHint="someColor"
答案 7 :(得分:11)
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>
如果您只想更改false状态的标签颜色,则不需要colorAccent,colorControlNormal和colorControlActivated
答案 8 :(得分:9)
您可以在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>
答案 9 :(得分:9)
很多答案,但只需要一行:
<强>机器人:textColorHint =&#34;#000000&#34; 强>
<EditText
android:id="@+id/edtEmail"
android:textColorHint="#000000"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
答案 10 :(得分: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
答案 11 :(得分:5)
看起来父视图的第三方库的样式导致EditText为白色。
android:theme="@style/com_mixpanel_android_SurveyActivityTheme"
一旦我删除了这一切,一切正常。
答案 12 :(得分:5)
(如果您正在使用材料设计库)。当前,我正在使用该版本
实现'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>
答案 13 :(得分: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();;
}
});
答案 14 :(得分:4)
<item name="colorAccent">@android:color/black</item>
将colorAccent更改为主题中所需的颜色,这将更改EditText行,Cursor以及提示
或者您也可以在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>
答案 15 :(得分:4)
从文档中:
提示应该在TextInputLayout而不是EditText上设置。如果在子EditText上以XML指定了提示,则TextInputLayout可能仍然可以正常工作; TextInputLayout将使用EditText的提示作为其浮动标签。但是,将来的修改提示的调用不会更新TextInputLayout的提示。为避免意外行为,请在TextInputLayout而不是EditText上调用setHint(CharSequence)和getHint()。
尝试在android:hint
而不是app:hintTextColor
上设置TextInputLayout
和TextInputEditText
。
答案 16 :(得分: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时,你会清楚地注意到这一点。
答案 17 :(得分:2)
使用Material Components library,您可以使用以下方法自定义TextInputLayout
提示文本的颜色:
在布局中:
Color textColor = color.computeLuminance() > 0.5 ? Colors.black : Colors.white;
属性:标签折叠时的颜色以及文本字段处于活动状态app:hintTextColor
属性:所有其他文本字段状态(例如静止和禁用)中标签的颜色类似:
android:textColorHint
答案 18 :(得分:1)
您必须在TextInputLayout上设置提示颜色。
答案 19 :(得分: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>``
答案 20 :(得分:1)
晚了,但可能会帮助我这样的人
<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>
答案 21 :(得分: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>
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>
答案 22 :(得分:0)
这是我遇到的类似问题和所需解决方案的经验。
要求:
TextInputEditText
(可以说某些应该是透明的,而有些则不能,但是对各种事件使用自定义颜色)面临的问题:
android:textColorHint
不能按要求工作。尝试的解决方案失败了:
android:textColorHint
样式并应用于TextInputEditText
。没有结果或差异。android:textColorHint
。它确实有帮助,但现在已为整个应用程序设置。 (不符合要求) 经过大量RnD处理后,找到的最佳解决方案是在一篇文章中,该文章描述了我们需要将主题应用于TextInputLayout
或父视图,而不是仅应用样式设置为TextInputEditText
或父视图。
请检查TextInputLayout proper Theming,该消息告诉我们我们走错了路。
答案 23 :(得分: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>
答案 24 :(得分:0)
如果您使用的是新的androidx材质设计库public class AzRDependencyResolver : System.Web.Http.Dependencies.IDependencyResolver, System.Web.Mvc.IDependencyResolver
{
private readonly CompositionContainer _container;
public AzRDependencyResolver(CompositionContainer container)
{
_container = container;
}
public IDependencyScope BeginScope()
{
return this;
}
/// <summary>
/// Called to request a service implementation.
///
/// Here we call upon MEF to instantiate implementations of dependencies.
/// </summary>
/// <param name="serviceType">Type of service requested.</param>
/// <returns>Service implementation or null.</returns>
public object GetService(Type serviceType)
{
if (serviceType == null)
throw new ArgumentNullException("serviceType");
var name = AttributedModelServices.GetContractName(serviceType);
var export = _container.GetExportedValueOrDefault<object>(name);
return export;
}
/// <summary>
/// Called to request service implementations.
///
/// Here we call upon MEF to instantiate implementations of dependencies.
/// </summary>
/// <param name="serviceType">Type of service requested.</param>
/// <returns>Service implementations.</returns>
public IEnumerable<object> GetServices(Type serviceType)
{
if (serviceType == null)
throw new ArgumentNullException("serviceType");
var exports = _container.GetExportedValues<object>(AttributedModelServices.GetContractName(serviceType));
return exports;
}
public void Dispose()
{
}
}
那么您可以使用colorstatelist来控制处于焦点,悬停和默认状态的提示文本颜色,如下所示。 (受this的启发)
在com.google.android.material
中输入以下内容:
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
答案 25 :(得分:0)
我只想在将标签抬高到顶部时更改标签颜色。但是设置class StackCheck {
Data stackTest = new Data(10, false); //create a new stack & confirm it's not a queue
public static void main() {
stackTest.push(10); //push 10 into the stack
stackTest.push(20); //push 20 into the stack
stackTest.push(30); //push 30 into the stack
stackTest.push(40); //push 40 into the stack
stackTest.push(50); //push 50 into the stack
stackTest.push(60); //push 60 into the stack
stackTest.push(70); //push 70 into the stack
stackTest.push(80); //push 80 into the stack
stackTest.push(90); //push 90 into the stack
stackTest.push(100); //push 100 into the stack
stackTest.push(110); //push 110 into the stack
stackTest.push(120); //push 120 into the stack
stackTest.overflowCheck();
}
public void overflowCheck() {
double ratio = stackArray.length/stackTest.size;
if(ratio > 1){
System.out.println("stack is overflowing");
}
else if(ratio == 1){
System.out.println("stack is full");
}
else{
System.out.println("stack is not full");
}
}
}
会更改每种状态的颜色。因此,这对我有用:
textColorHint
这将在焦点对准输入时更改颜色。
答案 26 :(得分:0)
使用TextInputLayout.setDefaultHintTextColor
答案 27 :(得分:0)
这里是完整定制的谷歌素材文本输入布局。这可能对你有帮助
<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>