TextInputLayout 使用materialThemeOverlay 属性覆盖editTextStyle 属性。
例如,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 定义一个样式,扩展 material themes 之一。
然后你必须使用新的 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>