如何将 Material Button ShapeAppearance 与 Edittext Shape Appearance 分开?

How to give Material Button ShapeAppearance seperate to Edittext Shape Appearance?

在 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 变成圆形。

我的问题是,这也影响了我所有 EdittextshapeAppearance,这不是我想要的。

是否可以为 Button 提供不同的 shapeAppearance 并为 Edittext 提供不同的 shapeAppearance

您可以通过覆盖组件的样式并定义自定义 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>