| name | android-dimen-dp-sp |
| description | 将布局与代码中的硬编码 dp、sp 改为引用 @dimen/dp_*、@dimen/sp_* 与 R.dimen.*; 资源名规则为整数部分与一位小数部分用下划线连接(如 12.5 → dp_12_5)。 在用户要求去掉魔法数、统一 dimen、替换 dp/sp 字面量或规范化尺寸引用时使用。 |
Android:硬编码 dp / sp → @dimen/dp_*、@dimen/sp_*
何时用本 Skill
- 用户要把 XML / Kotlin / Java 里写死的
Ndp / Nsp 或等价的 dp、sp 数值,改成 dimen 引用。
- 不要去仓库里搜索、推断或校验
values/dimens.xml 是否已有对应项:默认视为已存在,直接按规则写出 @dimen/... 与 R.dimen....。
命名规则(核心)
- 前缀:物理长度用
dp_,文字尺寸用 sp_。
- 有小数时:
整数部分 + _ + 小数点后那一位数字(仅 一位 小数参与命名)。
- 小数部分命名里的
_ 表示小数点,不是第二个「任意分隔符」。
- 一位小数的得出方式(与「12.5555 → dp_12_5」一致):截断到小数点后一位(丢弃第二位及以后),不按四舍五入成 12.6。
- 无小数(整数)时:
dp_12、sp_8,不要写成 dp_12_0(除非用户项目已有该风格再跟随项目)。
| 原始数值(dp 或 sp,单位一致即可) | 资源名(dp 示例) | XML 引用 | 代码引用 |
|---|
| 0.5 | dp_0_5 | @dimen/dp_0_5 | R.dimen.dp_0_5 |
| 12.5 | dp_12_5 | @dimen/dp_12_5 | R.dimen.dp_12_5 |
| 12.5555 | dp_12_5(先截断为 12.5) | @dimen/dp_12_5 | R.dimen.dp_12_5 |
| 12 | dp_12 | @dimen/dp_12 | R.dimen.dp_12 |
sp 同理:12.5sp → @dimen/sp_12_5、R.dimen.sp_12_5。
从字面量到资源名的算法(给 Agent 执行用)
对某个 dp 或 sp 的数值 v(只看数字部分):
- 若
v 为整数(或可视为整数):资源名为 dp_<整数> 或 sp_<整数>。
- 若
v 有小数部分:将 v 截断到小数点后一位得到 v',拆成整数部分 a 与一位小数数字 b(b 为 0–9),资源名为 dp_<a>_<b> 或 sp_<a>_<b>。
- 例:
v = 12.5555 → v' = 12.5 → a = 12, b = 5 → dp_12_5。
- 例:
v = 0.5 → v' = 0.5 → dp_0_5。
XML 写法
- 将
android:padding="12.5dp"、tools:layout_margin="8sp" 等中的 字面量 改为 @dimen/dp_12_5、@dimen/sp_8 等形式;不要在属性值里再保留 dp/sp 后缀(dimen 条目自身已带单位语义)。
- 若原先是
tools: 或 app: 等命名空间,只替换尺寸字面量部分,其余属性名与命名空间不变。
Kotlin / Java 写法
- 需要 资源 id 时:
R.dimen.dp_12_5、R.dimen.sp_8 等,与上述命名一致。
- 取像素时仍按项目惯例使用
resources.getDimension(R.dimen.dp_12_5) 等;本 Skill 只规定 资源名与引用形式,不规定用 px 还是 dp 的封装工具类。
注意
- 只改 dp/sp 到 dimen 的映射与引用;不要顺带「优化」无关布局、不要擅自新建
dimens.xml 条目(除非用户明确要求创建资源文件)。
- 负值、表达式(如
10dp+2dp)若出现,本 Skill 未定义统一资源名:先向用户确认或按项目已有约定处理。