Не могу использовать Android: фон с кнопкой из новых компонентов материала - PullRequest
0 голосов
/ 05 октября 2018

Я использую новые компоненты материала com.google.android.material:material с android x, но не могу установить собственный фон для кнопки.

Я знаю, что могу использовать app:backgroundTint, чтобы изменить цвет

но фон по умолчанию имеет некоторые отступы, от которых я хочу избавиться, и старый способ использования android:background для установки собственного фона, но это больше не работает.

Я посмотрел на документы , но не могу найти упоминания об этом изменении.

Ответы [ 2 ]

0 голосов
/ 17 августа 2019

В новой версии 1.1.0 ('com.google.android.material: material: 1.1.0'), если вы хотите переопределить некоторые атрибуты темы из стиля по умолчанию, вы можете использовать новый materialThemeOverlay атрибут.

В вашем случае вы можете сделать что-то вроде:

<style name="MtButtonStyle"
 parent="Widget.MaterialComponents.Button">
   <item name=“materialThemeOverlay”>@style/GreenButtonThemeOverlay</item>
</style>

<style name="GreenButtonThemeOverlay">
  <item name="colorPrimary">@color/green</item>
</style>
0 голосов
/ 05 октября 2018

Документация для MaterialButton класса гласит:

Не используйте атрибут android:background.MaterialButton управляет собственным фоном для рисования, а установка нового фона означает, что MaterialButton больше не может гарантировать, что новые атрибуты, которые он вводит, будут работать правильно.Если фон по умолчанию изменен, MaterialButton не может гарантировать четкое поведение.

Однако readme GitHub говорит:

Примечание:MaterialButton визуально отличается от Button и AppCompatButton.Одно из основных отличий состоит в том, что AppCompatButton имеет вставку 4dp слева и справа, тогда как MaterialButton нет.

Здесь упоминается только вставка слева / справа, но раздел атрибутов файла readme показывает, что поддерживаются все четыре вставки:

enter image description here

Таким образом, вы можете добавить эти атрибуты в <MaterialButton>тег:

android:insetTop="0dp"
android:insetBottom="0dp"
...