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 未定义统一资源名:先向用户确认或按项目已有约定处理。