You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MaterialCardView圆角XML编辑器显示正常 真机/模拟器不生效求助

MaterialCardView设置圆角在编辑器显示正常,运行时不生效

我给MaterialCardView设置了圆角,XML布局编辑器里显示完全正常,但在模拟器或物理设备上运行时,圆角效果却完全不生效。

参考图片

相关代码

头像布局代码:

<com.google.android.material.card.MaterialCardView
    android:layout_width="160dp"
    android:layout_height="160dp"
    android:layout_gravity="center"
    android:layout_marginTop="20sp"
    android:layout_marginBottom="10dp"
    app:cardCornerRadius="80dp">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/model1" />
</com.google.android.material.card.MaterialCardView>

统计布局代码:

<com.google.android.material.card.MaterialCardView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="5dp"
    app:cardCornerRadius="40dp"
    android:layout_weight="1"
    android:backgroundTint="@color/grey"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@color/grey"
        android:padding="50dp"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Overall"
            android:layout_gravity="start"
            android:textColor="@color/white"
            android:textSize="15sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/overall_score"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="start"
            android:textColor="@color/white"
            android:textSize="50sp"
            android:textStyle="bold" />
    </LinearLayout>

    <ProgressBar
        android:id="@+id/overall_score_progress_bar"
        style="@android:style/Widget.ProgressBar.Horizontal"
        android:layout_width="match_parent"
        android:layout_height="10dp"
        android:layout_gravity="bottom"
        android:max="100"
        android:layout_marginBottom="35dp"
        android:layout_marginStart="15dp"
        android:layout_marginEnd="15dp" />
</com.google.android.material.card.MaterialCardView>

解决方法

1. 确保使用Material主题

Activity主题必须继承自Theme.MaterialComponents.*(比如Theme.MaterialComponents.Light.NoActionBar),而非Theme.AppCompat系列主题——MaterialCardView依赖Material主题才能正常渲染圆角。

2. 移除背景冲突

统计布局中,MaterialCardView设置了android:backgroundTint,但内部LinearLayout又设置了android:background="@color/grey",子View的背景会覆盖CardView的圆角。删除LinearLayout的android:background属性,改用CardView的app:cardBackgroundColor设置背景色。

3. 启用裁剪和防重叠

给MaterialCardView添加以下两个属性,确保子View不会超出圆角范围:

  • app:clipToOutline="true":强制裁剪子View以匹配CardView的圆角
  • app:cardPreventCornerOverlap="false":关闭旧版本的圆角重叠兼容逻辑,避免干扰

4. 修正单位错误

头像布局中android:layout_marginTop="20sp"使用了sp单位(sp用于字体大小),布局间距应改用dp,修改为android:layout_marginTop="20dp"。

修改后的示例代码

头像布局:

<com.google.android.material.card.MaterialCardView
    android:layout_width="160dp"
    android:layout_height="160dp"
    android:layout_gravity="center"
    android:layout_marginTop="20dp"
    android:layout_marginBottom="10dp"
    app:cardCornerRadius="80dp"
    app:clipToOutline="true">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/model1" />
</com.google.android.material.card.MaterialCardView>

统计布局:

<com.google.android.material.card.MaterialCardView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="5dp"
    app:cardCornerRadius="40dp"
    android:layout_weight="1"
    app:cardBackgroundColor="@color/grey"
    app:cardPreventCornerOverlap="false"
    app:clipToOutline="true">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:padding="50dp"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Overall"
            android:layout_gravity="start"
            android:textColor="@color/white"
            android:textSize="15sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/overall_score"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="start"
            android:textColor="@color/white"
            android:textSize="50sp"
            android:textStyle="bold" />
    </LinearLayout>

    <ProgressBar
        android:id="@+id/overall_score_progress_bar"
        style="@android:style/Widget.ProgressBar.Horizontal"
        android:layout_width="match_parent"
        android:layout_height="10dp"
        android:layout_gravity="bottom"
        android:max="100"
        android:layout_marginBottom="35dp"
        android:layout_marginStart="15dp"
        android:layout_marginEnd="15dp" />
</com.google.android.material.card.MaterialCardView>

内容的提问来源于stack exchange,提问作者Player91

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:35:14