我正在尝试创建一个TextInputEditText,它的浮动提示颜色在未聚焦时不会改变。
提示的颜色从白色变为蓝色,即变为通过textColorHint字段设置的颜色。

android - 不聚焦时如何更改TextInputEditText float 提示颜色-LMLPHP

仅当TextInputEditText填充且未聚焦时才发生。我希望提示在TextInputEditText上方时为白色,而在框内时为蓝色。
当TextInputEditText不为空且未聚焦时,提示颜色变为蓝色。

android - 不聚焦时如何更改TextInputEditText float 提示颜色-LMLPHP

TextInputEditText

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/textInputLayout"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="4dp"
        android:textColorHint="@color/app_blue"
        app:hintTextAppearance="@style/TextAppearance.App.TextInputLayout"
        app:layout_constraintEnd_toStartOf="@+id/guideline"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/fNameET"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/text_input_layout_background"
            android:ellipsize="end"
            android:hint="First Name"
            android:lines="1"
            android:maxLines="1"
            android:paddingStart="16dp"
            android:paddingEnd="16dp" />
</com.google.android.material.textfield.TextInputLayout>


TextAppearance.App.TextInputLayout

    <style name="TextAppearance.App.TextInputLayout" parent="@android:style/TextAppearance">
        <item name="android:textColor">@android:color/white</item>
    </style>


而且我想使用xml而不是Java来完成上述任务。

最佳答案

我通过反射更改了聚焦颜色。这是一段可以帮助某人的代码段。

private void setUpperHintColor(int color) {
try {
    Field field = textInputLayout.getClass().getDeclaredField("mFocusedTextColor");
    field.setAccessible(true);
    int[][] states = new int[][]{
            new int[]{}
    };
    int[] colors = new int[]{
            color
    };
    ColorStateList myList = new ColorStateList(states, colors);
    field.set(textInputLayout, myList);

    Method method = textInputLayout.getClass().getDeclaredMethod("updateLabelState", boolean.class);
    method.setAccessible(true);
    method.invoke(textInputLayout, true);

} catch (Exception e) {
    e.printStackTrace();
}


}

关于android - 不聚焦时如何更改TextInputEditText float 提示颜色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58093221/

10-11 13:04