TextInputLayout
переопределяет атрибут editTextStyle
, используя атрибут materialThemeOverlay
.
Например, Widget.MaterialComponents.TextInputLayout.FilledBox
имеет такой стиль по умолчанию:
<style name="Widget.MaterialComponents.TextInputLayout.FilledBox" parent="Base.Widget.MaterialComponents.TextInputLayout">
<item name="materialThemeOverlay">
@style/ThemeOverlay.MaterialComponents.TextInputEditText.FilledBox
</item>
....
</style>
<style name="ThemeOverlay.MaterialComponents.TextInputEditText.FilledBox">
<item name="editTextStyle">@style/Widget.MaterialComponents.TextInputEditText.FilledBox</item>
</style>
Чтобы определить глобально, вы должны определить стиль для TextInputLayout
, расширяющего один из материальные темы.
Затем вам нужно использовать новый атрибут materialThemeOverlay
. Это позволяет вам переопределять атрибуты темы приложения, и вы можете изменить атрибут editTextStyle
.
Что-то типа:
<style name="MyCustomOutlined" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<item name="materialThemeOverlay">@style/MyThemeOverlayOutlined</item>
</style>
Таким образом, вы можете изменить editTextStyle
(атрибут темы приложения) только для этого стиля компонента.
<style name="MyThemeOverlayOutlined">
<item name="editTextStyle">@style/MyTextInputEditText_outlinedBox</item>
</style>
<style name="MyTextInputEditText_outlinedBox" parent="@style/Widget.MaterialComponents.TextInputEditText.OutlinedBox">
<item name="android:paddingTop">8dp</item>
<item name="android:paddingBottom">8dp</item>
....
</style>
Наконец, вы можете назначить MyCustomOutlined
конкретному TextInputLayout
в макете:
<com.google.android.material.textfield.TextInputLayout
style="@style/MyCustomOutlined"
.../>
или назначьте глобально в теме вашего приложения, используя:
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
....
<item name="textInputStyle">@style/MyCustomOutlined</item>
</style>
person
Gabriele Mariotti
schedule
04.09.2019