新com.google.android.material.textfield.TextInputEditText的全局样式

时间:2018-12-30 09:59:25

标签: android android-xml material-components-android

是否可以为新的 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是类似的帖子,但仅适用于旧的设计支持组件。

2 个答案:

答案 0 :(得分:2)

答案 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>