如何使用材料设计主题使按钮变圆?

Arc*_*nes 2 android android-button material-design material-components material-components-android

我希望我的按钮有圆角,例如:

圆形按钮// 图片取自google

要在 Android 中使用材质主题实现此目的,请将:设置shapeAppearanceSmallComponent为有一个rounded角。

但设置shapeAppearanceSmallComponent也会影响所有其他组件,例如EditText现在它们也被舍入。

因此,我没有将其设置为shapeAppearanceSmallComponent,而是创建了一个shapeMaterialOverlay. 将此覆盖设置为 abuttonStyle并将主题中的此按钮样式设置为默认按钮样式。

它有效,但仅适用于默认按钮。如果我需要TextButton这样的:

<Button
    ...
    style="@style/Widget.MaterialComponents.Button.TextButton"/>
Run Code Online (Sandbox Code Playgroud)

不会TextButton被舍入。因此,作为一种解决方法,我创建了MyTextButton从那里延伸TextButton并设置shapeOverlay在那里的样式。

所以现在如果我需要一个TextButton,我会这样做:

<Button
    ...
    style="@style/Widget.MaterialComponents.Button.MyTextButton"/>
Run Code Online (Sandbox Code Playgroud)

反而。

我必须对所有其他按钮类型执行此操作。我想知道这种方法是否正确,如果不正确,有人可以指导我如何正确执行此操作吗?

非常感谢。

Gab*_*tti 8

app:shapeAppearanceOverlay只需在布局中使用该属性即可。

<com.google.android.material.button.MaterialButton
        app:shapeAppearanceOverlay="@style/buttomShape"
        .../>
Run Code Online (Sandbox Code Playgroud)

和:

  <style name="buttomShape">
    <item name="cornerFamily">rounded</item>
    <item name="cornerSize">50%</item>
  </style>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

将其应用到所有按钮的唯一方法是为所有按钮样式定义自定义样式,就像您刚才所做的那样。就像是:

  <style name="...." parent="Widget.MaterialComponents.Button">
    <item name="shapeAppearance">@style/buttomShape</item>
  </style>

  <style name="..."  parent="Widget.MaterialComponents.Button.TextButton">
    <item name="shapeAppearance">@style/buttomShape</item>
  </style>
Run Code Online (Sandbox Code Playgroud)