Глобальный стиль для нового com.google.android.material.textfield.TextInputEditText - PullRequest
0 голосов
/ 30 декабря 2018

Можно ли стилизовать новый компонент 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>

но это не работает.

Здесь - аналогичное сообщение, но только для компонентов поддержки старого дизайна.

Ответы [ 2 ]

0 голосов
/ 04 сентября 2019

Вы должны определить стиль для TextInputLayout, расширяющего одну из тем материала .

Затем вы должны использовать новый атрибут 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>
0 голосов
/ 04 января 2019

Согласно этому комментарию editTextStyle является правильным атрибутом для установки.https://github.com/material-components/material-components-android/blob/6c70169e8d4ae77429a9c57785e443b2a18b4aa3/lib/java/com/google/android/material/theme/res/values/attrs.xml#L85

См. Пример использования в следующих стилях: https://github.com/material-components/material-components-android/blob/6c70169e8d4ae77429a9c57785e443b2a18b4aa3/lib/java/com/google/android/material/textfield/res/values/styles.xml#L141

Обновлено: пожалуйста, установите @ style / ThemeOverlay.MaterialComponents.TextInputEditText внутри вашего пользовательского TextInputLayoutStyle.

...