布局类型
这一页只说明 Ansiq 里最常见、最值得先记住的布局类型。更深入的实现路径见:
Direction
Direction::Column
Direction::Row它决定容器按哪个轴堆叠子节点。
Column:垂直堆叠,常见于Box::column()Row:水平排列,常见于工具栏、状态区、双栏界面
Length
Layout 里的宽高不是像素,而是终端单元格长度策略:
Layout {
width: Length::Fill,
height: Length::Auto,
}最常用的三种值:
Length::Auto:按内容测量自然大小Length::Fill:吃父容器剩余空间Length::Fixed(n):固定为n个终端单元格
这也是为什么 Paragraph、List、Input 这些 widget 可以在同一个容器里自然组合。
Constraint
Table 和其他需要“分列”的部件更常用 Constraint:
[
Constraint::Length(12),
Constraint::Min(24),
Constraint::Fill(1),
]常见语义:
Length(n):固定列宽Percentage(n):按父宽度百分比分配Fill(weight):按权重分剩余宽度Min(n)/Max(n):给列宽加边界
如果你写的是表格或多列明细页,优先从 Constraint 开始,而不是手动算字符宽度。
Flex
当列宽求解完之后,Flex 决定整列在剩余空间里怎么摆:
Flex::Start
Flex::Center
Flex::End
Flex::SpaceBetween
Flex::SpaceAround
Flex::SpaceEvenly最常见的是:
Start:列贴左边,剩余空间留在右边Center:整组列居中SpaceBetween:把多余空间塞进列间距
Padding 和 block inset
Block、Pane、Shell 这类容器不会让子节点直接占满外框,它们会先算自己的 inner(rect):
Padding::all(1)
Padding::symmetric(2, 1)你可以把它理解成:
outer rect -> border/title/padding -> inner rect -> children
如果看到“子节点好像没顶到边”,通常不是 layout 坏了,而是容器先做了 inset。
Shell 槽位布局
Shell 不是普通列布局,它是一个固定三槽模型:
headerbodyfooter
body 吃中间剩余空间,header/footer 保持可见。这类布局特别适合:
- activity monitor
- explorer
- session shell
如果你需要的是普通堆叠,用 Box::column();如果你要的是“上下固定,中间滚动”,用 Shell。
什么时候最值得看这些类型
- 写自定义 widget 或组合件
- 理解为什么某个区域会
Fill - 理解为什么
Table的列宽和你预期不同 - 调试 partial relayout 和 damage model
Last updated on