本页面由葡萄牙语机器翻译,可能存在错误。葡萄牙语版本为准。
Layout 与 Relative 模型
CrossFly 默认是相对的,而非绝对的。理解这一点就能明白为什么你的屏幕会 自行适配不同的尺寸、密度和旋转方向。
布局契约
每个容器都把子元素的组织委派给一个 Layout。这个级联的循环始终是:
测量 → 定位 → 向子元素传播 onLayout。
当布局失效时(尺寸、内容或旋转发生变化),框架会从根开始重做
这个循环。你无需手动重算位置 —— 你声明意图,由 Layout 去求解。
布局的谱系(按意图)
- 堆叠(垂直/水平)→
VerticalLayout/HorizontalLayout - 按分数的网格 →
GridLayout - 将一个组件锚定到另一个 →
RelativeLayout - 均匀分隔 →
EvenlySpacedLayout - 自由定位 →
RandomLayout
更换容器的 Layout 可以在不改动子元素的情况下改变排布 —— 这正是使响应
旋转变得轻而易举的原因。(操作指南见 布局。)
概念的核心:Relative
尺寸和位置不是固定像素 —— 而是关系。四种形式:
| 形式 | 含义 | 随之缩放 |
|---|---|---|
Relative.ofFont(1.5f) |
字体高度的分数 | UI 的缩放/密度 |
Relative.ofScreen(0.8f[, ScreenSize]) |
屏幕的分数 | 屏幕尺寸 / 方向 |
LAY_FILL / LAY_AUTO / 分数 |
容器的分数 | 父级的尺寸 |
Relative.ofPixels(24f) |
绝对像素 | 无(仅在例外情况使用) |
而 Gap(内边距 ingap / 外边距 outgap)遵循同样的逻辑:Gap.ofFont(...) 一同缩放。
// header(内容高度)、content(吸收剩余空间)、footer(内容)— 在 VerticalLayout 中:
tela.add(LAY_AUTO, header);
tela.add(LAY_FILL, conteudo); // 那个「弹性体」
tela.add(LAY_AUTO, footer);
为什么这是响应式的基础
如果没有到处散布的固定像素,框架就能在每次 resize、旋转或 缩放变化时重算一切 —— 屏幕便会自动重新适配。响应式不是一个独立的功能:它是 按关系测量的自然结果。
黄金法则:把尺寸写成
Relative/分数/LAY_FILL;把ofPixels留给 确实固定的场景。一个固定像素是在赌屏幕永远不会变 —— 而它总是会变。
参见
这个页面有帮助吗?感谢你的反馈!