Как сделать так, чтобы кнопка Material ShapeAppearance отделялась от Edittext Shape Appearance? - PullRequest
3 голосов
/ 14 января 2020

В android вы можете установить тему с помощью ShapeAppearance.MaterialComponents.SmallComponent, поэтому, если я установлю,

<style name="Some.Theme" parent="@style/Theme.MaterialComponents.DayNight.NoActionBar">
    ...
    <item name="shapeAppearanceSmallComponent">@style/ShapeAppearance.MyShape.SmallComponent</item>
    ...
</style>

Если я определил ShapeAppearance.MyShape.SmallComponent, чтобы округлить следующим образом:

<style name="ShapeAppearance.MyShape.SmallComponent" parent="ShapeAppearance.MaterialComponents.SmallComponent">
    <item name="cornerFamily">rounded</item>
    <item name="cornerSize">@dimen/someDPValue</item>
</style>

Я мог бы получить MaterialButton округлой формы.

Моя проблема в том, что это также влияет на shapeAppearance всех моих Edittext, что не то, что я хочу.

Можно ли предоставить другой shapeAppearance для Button и другой для Edittext?

1 Ответ

1 голос
/ 15 января 2020

Вы можете изменить форму компонента, переопределив стиль компонента и определив пользовательский shapeAppearanceOverlay.

Например, для MaterialButton вы можете использовать materialButtonStyle атрибут в теме приложения:

<style name="Some.Theme" parent="@style/Theme.MaterialComponents.DayNight.NoActionBar">
   <item name="materialButtonStyle">@style/MyApp.Button</item>
</style>

, где:

<style name="MyApp.Button" parent="@style/Widget.MaterialComponents.Button">
   <item name="shapeAppearanceOverlay">@style/ShapeAppearanceOverlay.MyApp.MaterialButton</item>
</style>

<style name="ShapeAppearanceOverlay.MyApp.MaterialButton" parent="">
    <item name="cornerFamily">rounded</item>
    <item name="cornerSize">@dimen/...</item>
</style>
...