android - 新 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>
但它不起作用。
这是一个类似的帖子,但仅适用于旧的设计支持组件。
解决方案
使用属性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>
推荐阅读
- javascript - 在 React 中使用 MUI v5 将按钮对齐到页面底部
- firebase - 虽然我什么都没写,firebase给出了权限错误
- jquery - 仅在宽度或高度更改时触发的Javascript窗口调整大小功能,而不是两者?
- python - 带有 ssl 客户端证书的 aiohttp
- c++ - 声明类数组时,具有多个参数的构造函数会抛出“在初始化程序中被视为复合表达式的表达式列表”
- python - PySimpleGui - 嵌套框架
- reactjs - 使用 expo secure-store 存储和检索用户凭据并填充电子邮件和密码字段
- azure - 重启后无法通过 SSH 连接到 Azure Ubuntu VM
- c# - 我无法弄清楚为什么我在读取反向数组问题的 codechef 问题中的数组元素时读取错误的输入
- css - Flex 框未对齐