Изменить цвет контура TextInputLayout - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь настроить TextInputLayout со стилем материала.Мне удалось установить фокусированное состояние на цвета, которые я хочу:

enter image description here

Использование

<com.google.android.material.textfield.TextInputLayout
     style="@style/LoginTextInputLayoutStyle"
     android:theme="@style/LoginTextInputLayoutStyle"
     android:textColorHint="#fff"
     app:boxStrokeColor="#fff"
     .....>
          <EditText ...

, где стиль:

<style name="LoginTextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
    <item name="colorAccent">#fff</item>
</style>   

Но когда текстовый ввод не сфокусирован, я получаю такой вид:

enter image description here

Как изменить цвет черноголиния тоже белая.Спасибо

Ответы [ 5 ]

0 голосов
/ 12 июня 2019

Что касается компонентов материала Alpha 7, вы просто создаете файл селектора цвета следующим образом: colors / text_input_outline_color.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true" android:color="@color/buttonDark"/>
    <item android:state_hovered="true" android:color="@color/buttonDark"/>
    <item android:state_focused="true" android:color="@color/buttonDark"/>
    <item android:color="@color/buttonDark"/>
</selector>

Для получения дополнительной информации о том, как это устанавливается.Вот соответствующий исходный код:

ColorStateList boxStrokeColorStateList =
    MaterialResources.getColorStateList(context, a, R.styleable.TextInputLayout_boxStrokeColor);
if (boxStrokeColorStateList != null && boxStrokeColorStateList.isStateful()) {
  defaultStrokeColor = boxStrokeColorStateList.getDefaultColor();
  disabledColor =
      boxStrokeColorStateList.getColorForState(new int[] {-android.R.attr.state_enabled}, -1);
  hoveredStrokeColor =
      boxStrokeColorStateList.getColorForState(new int[] {android.R.attr.state_hovered}, -1);
  focusedStrokeColor =
      boxStrokeColorStateList.getColorForState(new int[] {android.R.attr.state_focused}, -1);
} else {
  // If attribute boxStrokeColor is not a color state list but only a single value, its value
  // will be applied to the box's focus state.
  focusedStrokeColor =
      a.getColor(R.styleable.TextInputLayout_boxStrokeColor, Color.TRANSPARENT);
  defaultStrokeColor =
      ContextCompat.getColor(context, R.color.mtrl_textinput_default_box_stroke_color);
  disabledColor = ContextCompat.getColor(context, R.color.mtrl_textinput_disabled_color);
  hoveredStrokeColor =
      ContextCompat.getColor(context, R.color.mtrl_textinput_hovered_box_stroke_color);
}

Из этого списка вы можете видеть, что хотите убедиться, что используете селектор цвета со всеми определенными состояниями, или он по умолчанию вернется к другому цвету.

0 голосов
/ 28 февраля 2019
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:color="#FFFFFF"/>

<item android:state_focused="false" android:color="#FFFFFF"/></selector>

создайте каталог цветов и внутри него создайте файл ресурсов, вставьте указанный выше код в XML-файл каталога цветов и в стиле макета ввода текста вставьте следующую строку

<item name="boxStrokeColor">@color/focus_tint_list</item>
0 голосов
/ 12 июня 2018

Используйте этот стиль, чтобы применить цвет границы и ширину границы следующим образом:

<style name="LoginTextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
    <item name="boxStrokeColor">#fff</item>
    <item name="boxStrokeWidth">2dp</item>
</style>

получить Дополнительные сведения о стилизации по этой ссылке

Добавьте строку ниже в свойcolors.xml файл, который переопределяет цвет по умолчанию для TextInputLayout

<color name="mtrl_textinput_default_box_stroke_color" tools:override="true">#fff</color>
0 голосов
/ 14 декабря 2018

Начиная с версии 1.1.0-alpha02 Материальных Компонентов для Android, он просто создает ColorStateList для этих предметов.Процедура выглядит следующим образом:

В res/color/text_input_box_stroke.xml вставьте что-то вроде следующего:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#fcc" android:state_focused="true"/>
    <item android:color="#cfc" android:state_hovered="true"/>
    <item android:color="#ccf"/>
</selector>

Тогда в вашем styles.xml вы бы добавили:

<style name="LoginTextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense">
    <item name="boxStrokeColor">@color/text_input_box_stroke</item>
</style>

Наконец укажите свой стиль для фактического TextInputLayout:

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/my_layout_id"
    style="@style/LoginTextInputLayoutStyle"
    ...
0 голосов
/ 12 июня 2018

Я создал конфигурацию по умолчанию.

 <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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...