当edittext不在焦点上时,如何设置edittext的浮动标签文本颜色与edittext提示颜色不同?

时间:2016-10-16 07:56:54

标签: android android-layout android-edittext styles android-textinputlayout

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

3 个答案:

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