Android shape corners topLeftRadius XML左上角圆角

1次阅读

android:topLeftRadius仅在API 21+生效,需搭配android:shape=”rectangle”使用,且会被android:radius覆盖;兼容低版本应改用<corners>标签。

Android shape corners topLeftRadius XML左上角圆角

android:topLeftRadius 在 API 21+ 才生效

这个属性不是写上就立刻圆角的,它只在 API 21(Android 5.0)及以上版本被系统识别。低于这个版本,android:topLeftRadius 会被完全忽略,左上角保持直角。

常见错误现象:在旧机型或模拟器(如 API 19)上调试时发现圆角没出来,但 xml 看着没错——大概率就是版本问题。

  • 必须搭配 android:shape="rectangle" 使用,其他 shape 类型(如 oval、line)不支持该属性
  • 如果同时设置了 android:radius,它会覆盖所有单角半径(包括 android:topLeftRadius),优先级更低
  • 想兼容低版本?只能用 layer-list + 9-patch 或自定义 Drawable,XML 原生方案走不通

corners 标签替代更稳妥

corners 是标准写法,支持所有 API 版本,且语义清晰。它把四个角的半径统一收口管理,避免单个属性失效带来的迷惑。

使用场景:需要分别控制四角、或确保低至 API 14 都能显示圆角时,必须用这个。

  • 写法是:
    <corners android:topLeftRadius="8dp" />
  • 可以混用:android:topLeftRadiusandroid:bottomRightRadius 同时存在,互不影响
  • 如果只写 android:radius="8dp",四个角会等半径;但一旦用了任何单角属性,android:radius 就自动失效
  • 单位建议用 dp,别用 px,否则在高密度屏上圆角会显得过小

XML 中写错路径或命名导致圆角不渲染

圆角 Drawable 不生效,有时根本不是属性问题,而是资源没被正确引用。比如把 shape 文件放错目录,或名字含大写字母、下划线。

常见错误现象:布局里写了 android:background="@drawable/round_bg",但预览和运行都还是直角——先查文件是否存在、是否拼写一致。

  • shape XML 必须放在 res/drawable/ 目录下,不能放在 drawable-v21 里(除非你明确只给新系统用)
  • 文件名只能是小写字母、数字、下划线,且不能以数字开头;RoundBg.xmlround-bg.xml 都会导致编译失败或找不到资源
  • 检查是否有同名文件在不同 drawable-xxx 文件夹中冲突,AS 有时会静默选用错版本

View 背景圆角被父容器裁剪或遮挡

即使 shape 正确、属性生效,左上角看起来还是“方”的,大概率是 View 自身没撑开,或者父布局做了裁剪。

使用场景:给 TextViewCardView 加圆角背景后,边缘被切掉一部分。

  • 确认 View 的 padding 是否为 0;有 padding 时,圆角区域可能被内容顶出视觉范围
  • 父布局如果是 ConstraintLayout 且设了 app:layout_constrainedHeight="true",可能压缩高度导致圆角不可见
  • CardView 默认带 cardElevation,阴影会让圆角“浮起来”,但若 cardCornerRadius 没设,它不会读取 background 的圆角
  • 最直接验证方式:临时把背景换成纯色 #f00,看左上角是不是真圆——排除颜色/透明度干扰

实际项目里最容易漏的是 API 兼容性判断和资源路径校验。很多问题不是代码写得不对,而是没意识到 android:topLeftRadius 这个属性本身就有硬性版本门槛。

text=ZqhQzanResources