Измените цвет подсказки TextInputLayout программно - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь изменить цвет подсказки TextInputLayout изменить программно.Хотя настройки

 android:textColorHint="@color/redColor"

в xml работают просто отлично, и я получаю это: , а во время редактирования и это то, что я хочу, но янужно установить его динамически

Теперь у меня TextInputLayout не имеет метода setHintTextColor, но TextInputEditText делает, поэтому я попытался сделать это так:

editext.setHintTextColor(getColor(R.color.redColor))

Но это не работает с edditext, которыйпотомок TextInputLayout, поэтому, хотя TextInputLayout поддерживает атрибут «android: textColorHint», он не поддерживает метод «setHintTextColor», я искал способы сделать это по-другому, и я нашел людей, предлагающих использовать «setHintTextAppearance» с предопределенным стилем, и что ясделал, но это дает следующий результат:

нормальное состояние: сфокусированное состояние: enter image description here

Вот как выглядит стиль

<style name="AppRedText" parent="@android:style/TextAppearance">
    <item name="android:textColor">@color/redColor</item>
    <item name="android:textColorHint">@color/redColor</item>
    <item name="android:textSize">12sp</item>
</style>

Как программно добиться поведения атрибута "android: textColorHint"?

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

Я нашел решение для этого изменения TextInputLayout цвет текста подсказки.

вы можете использовать как:

setUpperHintColor(ContextCompat.getColor(context,R.color.your_color_name));

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

И вам нужно установить backgroundTintList (или supportBackgroundTintList) в EditText для экземпляра ColorStateList, содержащего только цвет, на который вы хотите изменить оттенок.Простой способ сделать это обратно совместимым образом выглядит следующим образом:

ColorStateList colorStateList = ColorStateList.valueOf(ContextCompat.getColor(context,R.color.your_color_name))
editText.setSupportBackgroundTintList(colorStateList)

Это даст EditText желаемый цвет подчеркивания.

0 голосов
/ 24 июля 2019

Я долго искал решение.Но наконец нашел это!Получилось слишком просто)

версия Kotlin:

private fun setTextInputLayoutHintColor(textInputLayout: TextInputLayout, context: Context, @ColorRes colorIdRes: Int) {
    textInputLayout.defaultHintTextColor = ColorStateList.valueOf(ContextCompat.getColor(context, colorIdRes))
}

и наконец:

setTextInputLayoutHintColor(textInputLayout, context, R.color.errorColor)
0 голосов
/ 24 мая 2018

Пожалуйста, проверьте ссылку ниже.Надеюсь, что это может помочь вам дать некоторое представление.

[ Изменение цвета акцента TextInputLayout программно

...