--- name: ui-devwidget-round description: >- 在需要圆角矩形纯色背景、描边边框时,优先用 DevWidget(io.github.afkt:DevWidgetX)的 dev.widget.ui.round 包替代 shape / layer-list drawable。流程与核心坑在 SKILL,Round 系列 View、R.styleable.DevWidget 中 app:dev_* 属性及源码对照见 references/reference.md。工作区内优先 Read lib/DevWidget;仅当无该模块时再查上游 GitHub。 --- # DevWidget `round` 包:圆角 + 纯色 + 描边 ## 模块路径契约(本地优先) 本 Skill 内凡涉及 DevWidget 源码与资源,**先读工作区本地模块**;勿在本地存在时 WebFetch GitHub 替代。 | 符号 | 当前值(DevUtils) | 说明 | |------|-------------------|------| | `DEVWIDGET_ROOT` | `lib/DevWidget` | DevWidget 模块根目录 | 完整路径、属性表与 Round 类型清单见 [references/reference.md](references/reference.md)。工作区无 `{DEVWIDGET_ROOT}` 或需对照远程 tag 时,才使用上游 fallback:https://github.com/afkT/DevUtils/tree/master/lib/DevWidget ## 何时用本 Skill - 需求是:**圆角**、**纯色背景**、**可选描边**,打算写 `shape.xml` / `layer-list` / selector drawable。 - **默认前提**:工程已依赖 **DevWidget**(及 README 要求的 **DevApp**)。坐标与模块说明 → Read `{DEVWIDGET_ROOT}/README.md`。 - **范围**:仅使用包路径 `dev.widget.ui.round` 下的实现;不引导使用 `dev.widget.ui.radius` 等其他目录。 ## 核心原则 1. **用 Round 系列控件 + `app:dev_*`**,少建 drawable 文件。 2. **禁止与 `android:background` 混用(RoundDrawable 方案)**:圆角背景占用了 View 的 `background`。在 XML 里写 `android:background` **不会按预期生效**;背景色、边框请用下文 `app:dev_backgroundColor`、`app:dev_borderWidth`、`app:dev_borderColor`。 3. **RoundDrawable 只支持纯色填充**(`ColorStateList`),不支持 Bitmap/复杂 Drawable 作背景。 4. 命名空间:`xmlns:app="http://schemas.android.com/apk/res-auto"`(以工程为准)。 ## Round 包类型速查 常用:`RoundFrameLayout`、`RoundLinearLayout`、`RoundConstraintLayout`、`RoundTextView`、`RoundButton`、`RoundImageView`、`RoundDrawable`。完整类列表与用途见 [references/reference.md § Round 包类型一览](references/reference.md#round-包类型一览)。 **选控件**:与原生同名布局一致即可(要 Constraint 用 `RoundConstraintLayout`,要文字用 `RoundTextView`…)。 **RoundImageView 与其它 Round* 的差异**:仅负责**圆形**头像式展示(`CENTER_CROP`);若要圆角矩形图片请不在本 Skill 范围内另选方案。 ## XML 属性速查 属性定义以 `{DEVWIDGET_ROOT}/src/main/res/values/attrs.xml` 为准;所有属性在资源中声明为 **`DevWidget`** 分组,XML 前缀一般为 **`app:`**。全表见 [references/reference.md § XML 属性](references/reference.md#xml-属性declare-styleable-名devwidget)。 **圆角逻辑摘要**(对照 reference 中 `RoundDrawable.java`): - 若 **任一角** `dev_radiusLeftTop` / `RightTop` / `LeftBottom` / `RightBottom` **> 0**:使用 `setCornerRadii` 四角独立圆角,并 **关闭** radius adjust bounds 的自动行为。 - 否则使用 **`dev_radius`** 作为 `setCornerRadius`;若 **`dev_radius` > 0** 同样会关闭与「仅 adjust」相关的自动圆角逻辑。 - 描边:`setStrokeData(borderWidth, borderColor)`。 **注意**:`RoundImageView` 的专用属性与限制见 [references/reference.md § 仅 RoundImageView](references/reference.md#仅-roundimageview);它固定为圆形裁剪,不用于圆角矩形图片。 ## 代码侧(可选) `RoundDrawable.fromAttributeSet`、`setBackgroundKeepingPadding` 与链式 API 见 [references/reference.md §代码侧 API](references/reference.md#代码侧-api)。 ## XML 最小示例(矩形圆角 + 纯色 + 描边) ```xml ``` **胶囊 View**:将 `app:dev_isRadiusAdjustBounds` 设为 `true`,并通常配合高度与 `dev_backgroundColor` / 描边使用(具体圆角值由短边一半决定)。 ## 自检清单(生成布局前) - [ ] 是否已 **Read 本地** `{DEVWIDGET_ROOT}`(存在时未用 WebFetch 代替)? - [ ] 是否应用了 **DevWidget** 依赖且未用 `android:background` 覆盖圆角背景? - [ ] 若是 **矩形**圆角容器:是否选了 `Round*Layout` / `RoundTextView` 之一? - [ ] 若是 **圆形头像**:是否使用 `RoundImageView` 且接受 `CENTER_CROP`? - [ ] 描边是否为 `app:dev_borderWidth` + `app:dev_borderColor` 组合?