当edittext不在焦点上时,如何设置edittext的浮动标签文本颜色与edittext提示颜色不同?
我最初将提示颜色设置为灰色。当用户专注于edittext时,它会变为红色。问题是在键入一些文本后删除了edittext的焦点,然后将edittext的浮动标签文本颜色更改为grey。我想要它只保留红色。只有在edittext中没有写入文本时,灰色应该是提示颜色,即使编辑文本没有聚焦,浮动标签颜色也应该是红色。
以下是我正在使用的代码 -
<android.support.design.widget.TextInputLayout
android:id="@+id/amountLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:hintTextAppearance="@style/TextAppearance.App.TextInputLayout"
android:paddingTop="@dimen/dp1">
<android.support.design.widget.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/amount"
android:textColor="@color/red"
android:inputType="number"/>
</android.support.design.widget.TextInputLayout>
<style name="TextAppearance.App.TextInputLayout" parent="@android:style/TextAppearance">
<item name="android:textColor">@color/red</item>
<item name="android:textSize">@dimen/sp8</item>
</style>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorControlNormal">@color/red</item>
<item name="colorControlActivated">@color/red</item>
<item name="colorControlHighlight">@color/red</item>
<item name="android:textColorHint">@color/grey</item>
</style>
答案 0 :(得分:1)
我也有这个问题,但我解决了,这是我可以帮助你的解决方案。
仅在TextInputLayout 中添加以下,而不是在TextInputEditText中添加。
android:textColorHint="@color/yourLabelColorWhenNotFocus"
如果在TextInputEditText和TextInputLayout中设置此属性,或者只在TextInputEditText中设置此属性,则它将无法正常工作。
答案 1 :(得分:1)
我找不到这样做的方法,并且从阅读TextInputLayout
的来源,结果证明这不可能以编程方式,因为无法修改私有成员{{1 ,这是TextInputLayout在视图未聚焦时将提示颜色更改为的颜色。设置它的唯一方法是通过xml:
mDefaultTextColor
这显然是不够的,因为我们希望能够动态设置它。
所以我通过一对扩展函数为它编写了访问器。
android:textColorHint="@color/red"
用法:
/**
* We need these accessors because this field is private and programmatically unstyleable,
* and we want to change the default (both focused and unfocused) hint text color.
*
* This is made safe by simply defaulting to null at any point there could be a problem.
*/
private fun TextInputLayout.getDefaultTextColor(): ColorStateList? {
javaClass.getDeclaredField("mDefaultTextColor").let { field ->
field.isAccessible = true
return field.get(this) as? ColorStateList?
}
}
private fun TextInputLayout.setDefaultTextColor(color: ColorStateList) {
javaClass.getDeclaredField("mDefaultTextColor").let { field ->
field.isAccessible = true
field.set(this, color)
}
}
您会注意到上面提到的//Get the original color
normalTextColor = text_input_layout.getDefaultTextColor()
//Change the color to another color
text_input_layout.setDefaultTextColor(ContextCompat.getColorStateList(context, R.color.red))
text_input_layout.setHintTextAppearance(R.style.TextAppearance_Error)
//Change the color back to the default
//(the TextInputLayout likes to use the inner TextInputEditText's hint color state list as a fallback, so we will too)
text_input_layout.setDefaultTextColor(normalTextColor ?: inner_text.hintTextColors)
text_input_layout.setHintTextAppearance(R.style.TextAppearance_Design_Hint)
样式,其定义很简单:
TextAppearance_Error
答案 2 :(得分:0)
只需在editText
中插入此属性即可更改浮动提示的颜色android:textColorHighlight="@android:color/white"
或者如果你想改变editText中的颜色(不是浮动颜色)你可以在你的主题中添加它
<item name="android:textColorHint">@android:color/white</item>