Как изменить цвет плавающей подсказки TextInputEditText, когда он не сфокусирован - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь создать TextInputEditText, цвет плавающей подсказки которого не изменится, если он не сфокусирован.Цвет подсказки меняется с белого на синий, т. Е. На цвет, заданный в поле textColorHint.

enter image description here

Это происходит только тогда, когда TextInputEditTextзаполнен и не сфокусирован.Я хочу, чтобы подсказка была белой, когда она выше TextInputEditText, и синей, когда она внутри поля.Когда TextInputEditText не пустой и не сфокусированный, цвет подсказки становится синим.

enter image description here

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.

Ответы [ 5 ]

0 голосов
/ 25 сентября 2019

Добавить стиль в свой TextInputLayout

 <style name="TextLabel">
        <item name="android:textColorHint">@color/dark_gray</item>
        <item name="colorControlActivated">@color/color_Black</item>
        <item name="android:focusable">false</item>
        <item name="android:focusableInTouchMode">true</item>
   </style>
0 голосов
/ 25 сентября 2019

Добавьте этот код в свой файл style.xml ->

<style name="TextLabelDummy" parent="Widget.MaterialComponents.TextInputLayout.FilledBox.Dense">
        <item name="colorAccent">@color/black</item>  // Text Color
        <item name="android:textColorHint">@color/blue</item>    // Hint Color
        <item name="colorControlActivated">@color/white</item>    //Floating label color
    </style>

Вы можете изменить родительский атрибут по своему усмотрению.Я случайно использовал «Widget.MaterialComponents.TextInputLayout.FilledBox.Dense»

Затем вызвал это как тему в ваш файл макета

<com.google.android.material.textfield.TextInputLayout
            android:id="@+id/textInputLayoutNumberDummy"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="32dp"
            android:layout_marginBottom="32dp"
            android:theme="@style/TextLabelDummy">

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/textInputEditTextNumberDummy"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/text_mobile" />

        </com.google.android.material.textfield.TextInputLayout>

Он работал нормально на моей стороне.Просто проверьте это и дайте мне знать об этом.Спасибо.

0 голосов
/ 25 сентября 2019

Я изменил сфокусированный цвет с отражением.Вот фрагмент, который может кому-то помочь.

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();
}

}

0 голосов
/ 25 сентября 2019

создать собственную тему для TextInputLayout, как показано ниже

<style name="TextInputLayoutHint" 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>

и применить ее к TextInputLayout, как показано ниже.

<android.support.design.widget.TextInputLayout
            android:theme="@style/TextInputLayoutHint"/>
0 голосов
/ 25 сентября 2019

добавить app:hintTextAppearance стиль, подобный этому:

   <com.google.android.material.textfield.TextInputLayout
    ......
      app:hintTextAppearance="@style/TextAppearance.App.TextInputLayout"
    ......>

и

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

ОБНОВЛЕНИЕ:

вам также необходимо установить тему EditText следующим образом:

android:theme="@style/InputText.Light"

и

 <style name="InputText.Light">
        <item name="android:textColorHighlight">top color</item>
    </style>
...