Android:是否有一种简单的方法可以为视图创建圆角,而不必每次都创建单独的可绘制对象?

2024-05-10

我在互联网上浏览了各种解决方案,这些解决方案使我们能够创建带有圆角的视图。其中大多数需要使用创建自定义视图,或者每次我们需要圆角视图时都需要在 xml 或九个补丁中创建可绘制对象。

问题是,当我实现此类视图时,我需要为每个此类视图创建一个可绘制对象,即使两个视图除了背景颜色之外具有所有内容。这对我来说有点恼火,我听说 iOS 框架提供了一种创建圆角视图的好方法。 任何帮助将非常感激。

编辑:除了圆角之外,视图的按压效果和阴影也是常用的样式。请让您的解决方案包含这些效果。


通过材料组件库,您可以使用MaterialShapeDrawable https://developer.android.com/reference/com/google/android/material/shape/MaterialShapeDrawable to 绘制自定义形状 https://github.com/material-components/material-components-android/blob/master/docs/theming/Shape.md.

例如与TextView你可以做:

    <TextView
        android:id="@+id/textview"
        android:backgroundTint="@color/secondaryColor"
        ../>

然后创建一个MaterialShapeDrawable:

float radius = getResources().getDimension(R.dimen.default_corner_radius);

TextView textView = findViewById(R.id.textview);
ShapeAppearanceModel shapeAppearanceModel = new ShapeAppearanceModel()
        .toBuilder()
        .setAllCorners(CornerFamily.ROUNDED,radius)
        .build();

MaterialShapeDrawable shapeDrawable = new MaterialShapeDrawable(shapeAppearanceModel);
ViewCompat.setBackground(textView,shapeDrawable);

用一个简单的View:

<View
    android:id="@+id/line"
    android:layout_width="match_parent"
    android:layout_height="4dp"
    android:backgroundTint="@color/..."/>

然后应用同样的MaterialShapeDrawable:

View line = findViewById(R.id.line);
ViewCompat.setBackground(line,shapeDrawable);

您还可以创建不同的角:

ShapeAppearanceModel shapeAppearanceModel = new ShapeAppearanceModel()
    .toBuilder()
    .setAllCorners(CornerFamily.ROUNDED,0)
    .setBottomRightCorner(CornerFamily.ROUNDED,radius)
    .build();

此外,大多数组件都由材料成分库 https://github.com/material-components/material-components-android有一个 MaterialShapeDrawable 作为背景。
在这些情况下,只需使用类似的东西(在本例中为 MaterialCardView)。

  MaterialCardView cardView = findViewById(R.id.card);
  cardView.setShapeAppearanceModel(cardView.getShapeAppearanceModel()
        .toBuilder()
        .setBottomLeftCornerSize(...)
        .setBottomEdge(...)
        .build());

它需要版本1.1.0图书馆的。现在1.1.0-beta02.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:是否有一种简单的方法可以为视图创建圆角,而不必每次都创建单独的可绘制对象? 的相关文章

随机推荐