Вы можете определить стиль :
<style name="AppTheme.TextInputLayout.OutlinedBox" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<item name="boxStrokeColor">@color/text_input_layout_outlined_box_stroke</item>
<item name="hintTextColor">@color/text_input_layout_outlined_box_stroke</item>
</style>
и применить его к представлению с помощью:
<com.google.android.material.textfield.TextInputLayout
style="@style/AppTheme.TextInputLayout.OutlinedBox"
..>
В то же время вы можете определить:
<style name="textInputPrimaryColor" parent="">
<item name="colorPrimary">@color/.....</item>
</style>
, а затем используйте его с атрибутом android:theme
:
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:theme="@style/textInputPrimaryColor"
..>
Таким образом вы можете изменить атрибуты темы для это представление и любые дочерние представления, которые полезны для переопределения цветовых палитр темы в определенной c части вашего интерфейса.
Подробнее информация здесь .
Таким образом вы переопределяете атрибут colorPrimary
в стиле Widget.MaterialComponents.TextInputLayout.OutlinedBox
.
Например, это селектор по умолчанию, используемый boxStrokeColor
.
<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>
Используя android:theme="@style/textInputPrimaryColor"
, вы можете изменить colorPrimary
для этого представления без расширения стиля.
Вы можете добиться того же поведения, используя атрибут materialThemeOverlay
в своем стиле:
<style name="My.OutlinedBox" parent="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<item name="materialThemeOverlay">@style/ThemeOverlay.My.OutlinedBox</item>
</style>
с:
<style name="ThemeOverlay.My.OutlinedBox" parent="ThemeOverlay.MaterialComponents.TextInputEditText.OutlinedBox">
<item name="colorPrimary">@color/......</item>
</style>
и затем примените его к вашему виду:
<com.google.android.material.textfield.TextInputLayout
style="@style/My.OutlinedBox"
..>
Я хочу, чтобы все мои элементы со стилем OutlinedBox коробка зеленого цвета? Я хотел бы избежать повторения темы и стиля для каждого представления ... Я имею в виду "глобальный" стиль, который наследуется от AppTheme, который уже применяется ко всему приложению в манифесте
В настоящее время существует не является атрибутом для определения стиля только для TextInputLayout
со стилем OutlinedBox.
Вы можете назначить глобальный стиль только для всех TextInputLayout
представлений в вашем приложении, используя textInputStyle
атрибут в теме вашего приложения:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
...
<item name="textInputStyle">@style/My.OutlinedBox</item>
</style>
Примечание: требуется версия 1.1.0
библиотеки компонентов материалов.