Skip to content

SOUI 尺寸系统指南

Warning

The current page still doesn't have a translation for this language.

You can read it through google translate.

尺寸系统是用户界面设计的基础组成部分。SOUI 框架提供了灵活且强大的尺寸定义机制,支持多种单位类型和集中式管理,确保界面在不同屏幕密度下保持一致的视觉效果。

支持的尺寸单位

SOUI 支持以下尺寸单位,每种单位都有其特定的使用场景:

单位类型 符号表示 说明 使用场景 示例
像素 px 物理像素单位 精确像素控制 100px
密度无关像素 dp 基于160dpi的相对单位 组件尺寸定义 16dp

单位详解

  • px (像素):物理像素单位,在不同密度的屏幕上显示效果不同
  • dp (密度无关像素):在160dpi屏幕上1dp=1px,自动适配不同屏幕密度

具名尺寸定义

创建尺寸资源文件

在项目的 values 目录下创建尺寸定义文件(推荐命名为 dimens.xml):

<?xml version="1.0" encoding="utf-8"?>
<dimen>
    <!-- 间距定义 -->
    <spacing_xs value="4dp"/>
    <spacing_sm value="8dp"/>
    <spacing_md value="16dp"/>
    <spacing_lg value="24dp"/>
    <spacing_xl value="32dp"/>

    <!-- 组件高度 -->
    <button_height value="36dp"/>
    <toolbar_height value="56dp"/>
    <list_item_height value="48dp"/>
    <card_elevation value="2dp"/>

    <!-- 文本大小 -->
    <text_size_small value="12sp"/>
    <text_size_normal value="14sp"/>
    <text_size_large value="16sp"/>
    <text_size_title value="20sp"/>

    <!-- 圆角半径 -->
    <corner_radius_small value="2dp"/>
    <corner_radius_normal value="4dp"/>
    <corner_radius_large value="8dp"/>

    <!-- 分割线高度 -->
    <divider_height value="1px"/>
    <divider_padding value="16dp"/>
</dimen>

注册尺寸资源

  1. 在资源索引文件注册uires.idx):
<values>
    <!-- 其他资源引用 -->
    <file name="dimens" path="values\dimens.xml"/>
</values>
  1. 在界面定义文件引用init.xml):
<UIDEF>
    <dim src="values:dimens"/>
    <!-- 其他配置 -->
</UIDEF>

尺寸使用方式

在布局文件中使用

通过 @dim/尺寸名称 语法引用定义的具名尺寸:

<!-- 设置控件尺寸 -->
<button name="confirm" width="@dim/button_width" height="@dim/button_height" text="确定"/>

<!-- 设置内边距 -->
<window name="container" padding="@dim/spacing_md" margin="@dim/spacing_sm">
    <text name="title" text="标题" size="@dim/text_size_title"/>
</window>

<!-- 设置分割线 -->
<colorrect name="divider" height="@dim/divider_height" color="#E0E0E0" margin="@dim/divider_padding,0"/>

<!-- 设置圆角 -->
<window name="card" width="200dp" height="100dp" roundCorner="@dim/corner_radius_normal"/>

常用属性支持

以下属性支持使用 @dim/ 引用:

属性名称 说明 示例
width 控件宽度 width="@dim/button_width"
height 控件高度 height="@dim/list_item_height"
margin 外边距 margin="@dim/spacing_md"
padding 内边距 padding="@dim/spacing_sm"
roundCorner 圆角半径 roundCorner="@dim/corner_radius_normal"
size 文本大小 size="@dim/text_size_normal"

设计规范建议

命名规范

采用语义化命名,使用小写字母和下划线:

  • 间距类spacing_[size] - 如 spacing_md, spacing_lg
  • 尺寸类[component]_[property] - 如 button_height, toolbar_height
  • 文本类text_size_[type] - 如 text_size_normal, text_size_title
  • 装饰类[property]_[type] - 如 corner_radius_normal, elevation_small

尺寸阶梯

建议建立标准化的尺寸阶梯:

<!-- 间距阶梯(4dp 为基准)-->
<spacing_xs value="4dp"/>    <!-- 最小间距 -->
<spacing_sm value="8dp"/>    <!-- 小间距 -->
<spacing_md value="16dp"/>   <!-- 标准间距 -->
<spacing_lg value="24dp"/>   <!-- 大间距 -->
<spacing_xl value="32dp"/>   <!-- 最大间距 -->

<!-- 文本阶梯(2sp 为增量)-->
<text_size_small value="12sp"/>
<text_size_normal value="14sp"/>
<text_size_large value="16sp"/>
<text_size_title value="18sp"/>
<text_size_headline value="22sp"/>

适配建议

  1. 使用dp单位:除特殊需求外,优先使用dp单位确保密度适配
  2. 避免硬编码:所有尺寸应通过资源文件定义
  3. 建立基准:以8dp或4dp作为基础尺寸单位
  4. 保持一致性:相同用途的尺寸使用统一的具名值

常见问题解答

Q: dp和px有什么区别? A: dp是密度无关像素,会根据屏幕密度自动缩放;px是物理像素,在不同密度屏幕上显示大小不同。

Q: 如何支持不同屏幕密度? A: 使用dp单位可以自动适配不同密度,SOUI框架会在运行时根据屏幕密度进行转换。