android TextInputLayout提示文本颜色在焦点上更改

eivgtgni  于 2022-12-21  发布在  Android
关注(0)|答案(3)|浏览(198)

最初我将文本提示颜色设置为灰色...如果验证失败,则将提示颜色更改为红色...但如果我移动到另一个编辑文本(无论何时失去焦点)..颜色显示默认值...
下面是我在布局中使用的代码

<android.support.design.widget.TextInputLayout
                android:id="@+id/tip_email"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_toLeftOf="@+id/img_email"
                android:hint="@string/email"
                app:hintTextAppearance="@style/EditTextHint">

                <EditText
                    android:id="@+id/et_email"
                    style="@style/EditTextWithBlackMediumSizeWithoutLeftAndTopPadding10"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@null"
                    android:inputType="textEmailAddress"
                    android:textColorHint="@color/label_input_color" />

            </android.support.design.widget.TextInputLayout>

用于修改颜色的样式

<style name="EditTextHint" parent="MyMaterialTheme">
    <item name="android:textColor">@color/label_input_color</item>
    <item name="android:textSize">@dimen/font_mini</item>
    <item name="android:textAllCaps">@bool/fletTextcaps</item>
</style>

<style name="EditTextHintError" parent="MyMaterialTheme">
    <item name="android:textColor">@color/tab_selected_text_color</item>
    <item name="android:textSize">@dimen/font_mini</item>
    <item name="android:textAllCaps">@bool/fletTextcaps</item>
</style>

我用来改变颜色的Java代码是

tip_email.setHintTextAppearance(R.style.EditTextHintError);

提示_电子邮件.设置提示文本外观(R.样式.编辑文本提示错误);
随附截图
Starting ScreenEmail validation failed and color changed to red
我需要的颜色是相同的,即使重点已经改变。。请建议对这个...。

gtlvzcf8

gtlvzcf81#

这似乎是TextInputLayout类中的一个bug。当您通过调用setHintTextAppearance更新HintTextAppearance时,它只更改mFocusedTextColor,而不更改mDefaultTextColor
您可以检查源代码:TextInputLayout source
同时改变颜色的反射解决方案:

public void setInputTextLayoutColor(TextInputLayout til, @ColorInt int color) {
    try {
        final Field fDefaultTextColor = TextInputLayout.class.getDeclaredField("mDefaultTextColor");
        fDefaultTextColor.setAccessible(true);
        fDefaultTextColor.set(til, new ColorStateList(new int[][]{{0}}, new int[]{color}));

        final Field fFocusedTextColor = TextInputLayout.class.getDeclaredField("mFocusedTextColor");
        fFocusedTextColor.setAccessible(true);
        fFocusedTextColor.set(til, new ColorStateList(new int[][]{{0}}, new int[]{color}));
    } catch (Exception e) {
        e.printStackTrace();
    }
}
6ovsh4lw

6ovsh4lw2#

你可以简单地通过使用材质TextInputLayout并添加textColorHint、hintTextColor属性来实现,这样做效果很好

<com.google.android.material.textfield.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
              android:textColorHint="@color/gray"
            app:hintTextColor="@color/gray"
         
           >
qvtsj1bj

qvtsj1bj3#

您只需通过编程方式将TextInputLayout上的defaultHintTextColor设置为所需的颜色

val colorInt = resources.getColor(R.color.red)
val csl = ColorStateList.valueOf(colorInt)
tipEmail.defaultHintTextColor = csl

相关问题