新 com.google.android.material.textfield.TextInputEditText 的全局样式
Global style for new com.google.android.material.textfield.TextInputEditText
是否可以在不为每个组件额外设置的情况下为新的 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 与 post 类似,但仅适用于旧设计支持组件。
根据此评论,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。
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>
是否可以在不为每个组件额外设置的情况下为新的 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 与 post 类似,但仅适用于旧设计支持组件。
根据此评论,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。
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>