CtrlK
BlogDocsLog inGet started
Tessl Logo

android-dimen-dp-sp

将布局与代码中的硬编码 dp、sp 改为引用 @dimen/dp_*、@dimen/sp_* 与 R.dimen.*; 资源名规则为整数部分与一位小数部分用下划线连接(如 12.5 → dp_12_5)。 在用户要求去掉魔法数、统一 dimen、替换 dp/sp 字面量或规范化尺寸引用时使用。

76

Quality

93%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

Android:硬编码 dp / sp → @dimen/dp_*@dimen/sp_*

何时用本 Skill

  • 用户要把 XML / Kotlin / Java 里写死的 Ndp / Nsp 或等价的 dp、sp 数值,改成 dimen 引用
  • 不要去仓库里搜索、推断或校验 values/dimens.xml 是否已有对应项:默认视为已存在,直接按规则写出 @dimen/...R.dimen....

命名规则(核心)

  1. 前缀:物理长度用 dp_,文字尺寸用 sp_
  2. 有小数时整数部分 + _ + 小数点后那一位数字(仅 一位 小数参与命名)。
    • 小数部分命名里的 _ 表示小数点,不是第二个「任意分隔符」。
  3. 一位小数的得出方式(与「12.5555 → dp_12_5」一致):截断到小数点后一位(丢弃第二位及以后),按四舍五入成 12.6。
  4. 无小数(整数)时dp_12sp_8不要写成 dp_12_0(除非用户项目已有该风格再跟随项目)。
原始数值(dp 或 sp,单位一致即可)资源名(dp 示例)XML 引用代码引用
0.5dp_0_5@dimen/dp_0_5R.dimen.dp_0_5
12.5dp_12_5@dimen/dp_12_5R.dimen.dp_12_5
12.5555dp_12_5(先截断为 12.5)@dimen/dp_12_5R.dimen.dp_12_5
12dp_12@dimen/dp_12R.dimen.dp_12

sp 同理:12.5sp@dimen/sp_12_5R.dimen.sp_12_5

从字面量到资源名的算法(给 Agent 执行用)

对某个 dp 或 sp 的数值 v(只看数字部分):

  1. v 为整数(或可视为整数):资源名为 dp_<整数>sp_<整数>
  2. v 有小数部分:将 v 截断到小数点后一位得到 v',拆成整数部分 a 与一位小数数字 bb 为 0–9),资源名为 dp_<a>_<b>sp_<a>_<b>
    • 例:v = 12.5555v' = 12.5a = 12, b = 5dp_12_5
    • 例:v = 0.5v' = 0.5dp_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_5R.dimen.sp_8 等,与上述命名一致。
  • 取像素时仍按项目惯例使用 resources.getDimension(R.dimen.dp_12_5) 等;本 Skill 只规定 资源名与引用形式,不规定用 px 还是 dp 的封装工具类。

注意

  • 只改 dp/sp 到 dimen 的映射与引用;不要顺带「优化」无关布局、不要擅自新建 dimens.xml 条目(除非用户明确要求创建资源文件)。
  • 负值、表达式(如 10dp+2dp)若出现,本 Skill 未定义统一资源名:先向用户确认或按项目已有约定处理。
Repository
afkT/DevUtils
Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.