- 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
<dev.widget.ui.round.RoundTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingHorizontal="12dp"
android:paddingVertical="6dp"
android:text="标签"
app:dev_backgroundColor="#33FF5722"
app:dev_borderColor="#FFFF5722"
app:dev_borderWidth="1dp"
app:dev_radius="8dp" />
```
**胶囊 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` 组合?
GitHub에서 보기