是否可以为新的 com.google.android.material.textfield.TextInputEditText 组件设置样式,而无需为每个组件额外设置它?
例如:
对于新的TextInputLayout,我可以通过以下方式全局设置样式:
<style name="Theme.MyTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
.
.
.
<item name="textInputStyle">@style/MyTextInputLayoutStyle</item>
</style>
我希望 TextInputEditText 例如:
<item name="editTextStyle">@style/MyTextInputEditTextStyle</item>
但是它不起作用。
Here是类似的帖子,但仅适用于旧的设计支持组件。
答案 0 :(得分:2)
根据此注释,editTextStyle是要设置的正确属性。 https://github.com/material-components/material-components-android/blob/6c70169e8d4ae77429a9c57785e443b2a18b4aa3/lib/java/com/google/android/material/theme/res/values/attrs.xml#L85
已更新: 请在您的自定义TextInputLayoutStyle中设置@ style / ThemeOverlay.MaterialComponents.TextInputEditText。
答案 1 :(得分:0)
您必须为TextInputLayout
定义一种扩展material themes的样式。
然后,您必须使用新的 materialThemeOverlay
属性。它允许您覆盖应用程序主题属性以为各个组件设置不同的样式,而无需更改全局行为。
类似的东西:
<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>