Изменение цвета "label text" в TextField. Material Design

TextField

Можно ли, выделенной области в синий прямоугольник, задать конкретный цвет для всех состояний. Например, состояние Error делает все составляющие TextField красным цветом, но можно ли сделать так, чтобы, выделенная область, осталась конкретным цветом и не менялась?


Ответы (1 шт):

Автор решения: Andrew

Этот элемент называется Floating Label. В xml его цвет можно изменить следующим способом.Для начала создается такого рода разметка:

<android.support.design.widget.TextInputLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:theme="@style/TextLabel">

     <android.support.v7.widget.AppCompatEditText
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:hint="Hint text"
         android:id="@+id/edit_id"/>

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

Дальше создаем стили для этого поля ввода:

<style name="TextLabel" parent="TextAppearance.AppCompat">
    <!-- Цвет hint и label в состоянии FALSE -->
    <item name="android:textColorHint">@color/Color Name</item> 
    <item name="android:textSize">20sp</item>
    <!-- Цвет label в состоянии TRUE и цвет линии поля ввода в состоянии FALSE и TRUE -->
    <item name="colorAccent">@color/Color Name</item>
    <item name="colorControlNormal">@color/Color Name</item>
    <item name="colorControlActivated">@color/Color Name</item>
 </style>

Вот и вот есть подобный вопрос. Вот есть туториал по этой теме. Для программного изменения текста, в активности нужно назначать стиль hint:

textInputLayout.setHintTextAppearance(R.style.Inactive);

И дальше уже создайте стили по примеру выше, но только с цветами которые вам нужны. Так же программно можно установить цвет текста по-умолчанию:

textInputLayout.setDefaultHintTextColor(R.style.Default);
→ Ссылка