在 MaterialCardView 的边框上绘制 ChipGroup 内的 Chip

Posted

技术标签:

【中文标题】在 MaterialCardView 的边框上绘制 ChipGroup 内的 Chip【英文标题】:Draw Chip inside ChipGroup over border of MaterialCardView 【发布时间】:2021-12-12 15:17:57 【问题描述】:

我正在为 recyclerview 行进行布局,我希望 ChipGroup 像在这个模型中一样在 MaterialCard 的边框上绘制:

问题是我使用什么父布局无关紧要,或者如果我禁用clipChildren,芯片永远不会与MaterialCardView重叠,如果我用一个简单的按钮替换芯片,它看起来正是我想要的。

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_
    android:layout_>
    <com.google.android.material.chip.ChipGroup
        app:layout_constraintTop_toTopOf="parent"
        android:layout_
        android:layout_
        android:layout_marginStart="10dp"
        app:singleLine="true">

        <com.google.android.material.chip.Chip
            android:id="@+id/chip_1"
            android:layout_
            android:layout_
            android:clickable="false"
            android:text="Urgente"
            app:chipIcon="@drawable/ic_baseline_circle_24"
            app:chipIconSize="16dp"
            app:chipIconTint="@android:color/holo_orange_dark"
            app:chipStartPadding="6dp" />

        <com.google.android.material.chip.Chip
            android:id="@+id/chip_2"
            android:layout_
            android:layout_
            android:text="Etiqueta 1" />

        <com.google.android.material.chip.Chip
            android:id="@+id/chip_3"
            android:layout_
            android:layout_
            android:text="Etiqueta 2" />

    </com.google.android.material.chip.ChipGroup>
    <com.google.android.material.card.MaterialCardView
        android:layout_
        app:layout_constraintTop_toTopOf="parent"
        android:layout_
        android:layout_marginTop="22dp"
        app:cardCornerRadius="0dp"
        app:strokeColor="@android:color/holo_red_light"
        app:strokeWidth="2dp"/>

</androidx.constraintlayout.widget.ConstraintLayout>

这就是它的外观(ChipGroup 是在 xml 中的 MaterialCardView 之前还是之后都没有关系,如果我把它放在 MaterialCardView 里面它只会在里面绘制)。

这是用 Button 替换 ChipGroup,您可以看到它在 MaterialCardView 的边框上绘制,这正是我想要的。

【问题讨论】:

MaterialCardView 的默认高度约为 2-4dp,因此您可以将 cardElevation 设置为 0dp 或将芯片组的高度增加到 4dp 或更高。这里要注意的是,给chipGroup 赋予高度会导致在每个芯片下方显示阴影。请注意,API 级别超过 21 级将适用提升。 这可能已经改变了,我针对 api 31 并将 CardView 的高度设置为 0dp 不起作用,而且芯片不会在芯片组中显示高度为 2dp 的阴影,这足以让他们在 MaterialCardView 上绘制 【参考方案1】:

你可以使用海拔。

来源链接

https://material.io/design/environment/elevation.html#depicting-elevation

【讨论】:

完美!将 android:elevation="2dp" 添加到 ChipGroup,现在它可以工作了,非常感谢!

以上是关于在 MaterialCardView 的边框上绘制 ChipGroup 内的 Chip的主要内容,如果未能解决你的问题,请参考以下文章

Objective- C:在 UIImage 上绘制边框

在画布上的图像不透明部分周围绘制边框

为啥给 div 一个背景颜色在其边框上绘制?

OpenGL - 当我在立方体上绘制边框时出现额外的线条

在 QListWidget 项目上绘制边框使文本在单击时消失

在 java swing 组件上绘制边框