Как изменить цвет метки TextinputLayout и edittext underline android

Я использую библиотеку дизайна Android TextinputLayout. Но не удалось настроить цвет подсказки, цвет ярлыка и цвет подчеркивания EditText внутри TextinputLayout. Пожалуйста, помогите.

Ответ 1

Чтобы изменить цвет нижней строки, вы можете использовать это в теме вашего приложения:

<item name="colorControlNormal">#c5c5c5</item>
<item name="colorControlActivated">@color/accent</item>
<item name="colorControlHighlight">@color/accent</item>

Для получения дополнительной информации, проверьте эту резьбу.

Чтобы изменить плавающий цвет метки

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

и используйте это как:

 <android.support.design.widget.TextInputLayout
  ...
   app:hintTextAppearance="@style/TextAppearance.App.TextInputLayout" >

Обновить:
И используйте его, как показано ниже, если вы хотите изменить цвет подсказки, когда это не плавающая метка:

<android.support.design.widget.TextInputLayout
  ...
    app:hintTextAppearance="@style/TextAppearance.App.TextInputLayout"
    android:textColorHint="#c1c2c4">

Благодаря @AlbAtNf

Ответ 2

На основе Федора Казакова и других ответов я создал конфигурацию по умолчанию.

styles.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="Widget.Design.TextInputLayout" parent="AppTheme">
        <item name="hintTextAppearance">@style/AppTheme.TextFloatLabelAppearance</item>
        <item name="errorTextAppearance">@style/AppTheme.TextErrorAppearance</item>
        <item name="counterTextAppearance">@style/TextAppearance.Design.Counter</item>
        <item name="counterOverflowTextAppearance">@style/TextAppearance.Design.Counter.Overflow</item>
    </style>

    <style name="AppTheme.TextFloatLabelAppearance" parent="TextAppearance.Design.Hint">
        <!-- Floating label appearance here -->
        <item name="android:textColor">@color/colorAccent</item>
        <item name="android:textSize">20sp</item>
    </style>

    <style name="AppTheme.TextErrorAppearance" parent="TextAppearance.Design.Error">
        <!-- Error message appearance here -->
        <item name="android:textColor">#ff0000</item>
        <item name="android:textSize">20sp</item>
    </style>

</resources>

activity_layout.xml

<android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.AppCompatEditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Text hint here"
        android:text="5,2" />

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

Ориентированные:

Focused

Без фокуса:

Без фокуса

Сообщение об ошибке:

введите описание изображения здесь

Ответ 3

В этом блоге описываются различные аспекты стилей EditText и AutoCompleteTextView заключенные в TextInputLayout.

Для EditText и AppCompat lib 22.1. 0+ вы можете установить атрибут темы с некоторыми настройками, связанными с темой:

<style name="StyledTilEditTextTheme">
   <item name="android:imeOptions">actionNext</item>
   <item name="android:singleLine">true</item>
   <item name="colorControlNormal">@color/greyLight</item>
   <item name="colorControlActivated">@color/blue</item>
   <item name="android:textColorPrimary">@color/blue</item>
   <item name="android:textSize">@dimen/styledtil_edit_text_size</item>
</style>

<style name="StyledTilEditText">
    <item name="android:theme">@style/StyledTilEditTextTheme</item>
    <item name="android:paddingTop">4dp</item>
</style>

и примените их к EditText:

<EditText
    android:id="@+id/etEditText"
    style="@style/StyledTilEditText"

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

private void setStyleForTextForAutoComplete(int color) {
    Drawable wrappedDrawable =     DrawableCompat.wrap(autoCompleteTextView.getBackground());
    DrawableCompat.setTint(wrappedDrawable, color);
    autoCompleteTextView.setBackgroundDrawable(wrappedDrawable);
}

и в Activity.onCreate:

setStyleForTextForAutoComplete(getResources().getColor(R.color.greyLight));
autoCompleteTextView.setOnFocusChangeListener((v, hasFocus) -> {
    if(hasFocus) {
        setStyleForTextForAutoComplete(getResources().getColor(R.color.blue));
    } else {
        if(autoCompleteTextView.getText().length() == 0) {  
              setStyleForTextForAutoComplete(getResources().getColor(R.color.greyLight));
        }
    }
});

Ответ 4

Добавьте этот атрибут в тег Edittext и наслаждайтесь:

 android:backgroundTint="@color/colorWhite"

Ответ 5

Если вы хотите изменить цвет штрих-линии и цвет текста подсказки TextInputLayout (то, что обычно имеет цвет акцента), просто создайте этот стиль:

<style name="MyStyle">
    <item name="colorAccent">@color/your_color</item>
</style>

Затем примените его к TextInputLayout как тему:

<android.support.design.widget.TextInputLayout
    ...
    app:theme="@style/MyStyle" />

Это в основном задает тему (не стиль) для одного представления (в отличие от всего действия).

Ответ 6

<style name="Widget.Design.TextInputLayout" parent="android:Widget">
    <item name="hintTextAppearance">@style/TextAppearance.Design.Hint</item>
    <item name="errorTextAppearance">@style/TextAppearance.Design.Error</item>
</style>

Вы можете переопределить этот стиль для макета

А также вы можете изменить внутренний стиль EditText-item.

Ответ 7

<style name="EditScreenTextInputLayoutStyle" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorControlNormal">@color/actionBar_background</item>
    <item name="colorControlActivated">@color/actionBar_background</item>
    <item name="colorControlHighlight">@color/actionBar_background</item>
    <item name="colorAccent">@color/actionBar_background</item>
    <item name="android:textColorHint">@color/actionBar_background</item>
</style>

применить этот стиль к TextInputLayout

Ответ 8

TextinputLayout - это не представление, а Layout, как очень хорошо описал Dimitrios Tsigouris в своем блоге здесь. Поэтому вам не нужен Style, который предназначен только для Views, но используйте Theme. После публикации в блоге я получил следующее решение:

Начните в вашем styles.xml с

<style name="TextInputLayoutAppearance" parent="Widget.Design.TextInputLayout">
        <!-- reference our hint & error styles -->
        <item name="android:textColor">@color/your_colour_here</item>
        <item name="android:textColorHint">@color/your_colour_here</item>
        <item name="colorControlNormal">@color/your_colour_here</item>
        <item name="colorControlActivated">@color/your_colour_here</item>
        <item name="colorControlHighlight">@color/your_colour_here</item>
</style>

И в свой макет добавить

<com.google.android.material.textfield.TextInputLayout
                android:theme="@style/TextInputLayoutAppearance"
...

Ответ 9

With the Библиотека компонентов материалов позволяет использовать com.google.android.material.textfield.TextInputLayout.

Вы можете применить собственный стиль, чтобы изменить цвета.

Чтобы изменить цвет подсказки, вы должны использовать следующие атрибуты:
 hintTextColor и android:textColorHint.

<style name="Custom_textinputlayout_filledbox" parent="@style/Widget.MaterialComponents.TextInputLayout.FilledBox">
    <!-- The color of the label when it is collapsed and the text field is active -->
    <item name="hintTextColor">?attr/colorPrimary</item>

    <!-- The color of the label in all other text field states (such as resting and disabled) -->
    <item name="android:textColorHint">@color/selector_hint_text_color</item>
</style>

Вы должны использовать селектор для android:textColorHint. Что-то вроде:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:alpha="0.38" android:color="?attr/colorOnSurface" android:state_enabled="false"/>
  <item android:alpha="0.6" android:color="?attr/colorOnSurface"/>
</selector>

Чтобы изменить цвет нижней строки, необходимо использовать атрибут: boxStrokeColor.

<style name="Custom_textinputlayout_filledbox" parent="@style/Widget.MaterialComponents.TextInputLayout.FilledBox">
    ....
    <item name="boxStrokeColor">@color/selector_stroke_color</item>
</style>

Также в этом случае вы должны использовать селектор. Что-то вроде:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:color="?attr/colorPrimary" android:state_focused="true"/>
  <item android:alpha="0.87" android:color="?attr/colorOnSurface" android:state_hovered="true"/>
  <item android:alpha="0.12" android:color="?attr/colorOnSurface" android:state_enabled="false"/>
  <item android:alpha="0.38" android:color="?attr/colorOnSurface"/>
</selector>

enter image description here enter image description here

Вы также можете применить эти атрибуты в макете:

<com.google.android.material.textfield.TextInputLayout
    style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
    app:boxStrokeColor="@color/selector_stroke_color"
    app:hintTextColor="?attr/colorPrimary"
    android:textColorHint="@color/selector_hint_text_color"
    ...>