YStudio Y++

窗口布局

Y++ / YStudio 开发文档 · 一点滴

设计器里把控件摆整齐,窗口一放大仍能跟着伸:用 停靠、水平/垂直布局 和 弹簧。YSS 只改外观,不改坐标;不要给布局或弹簧写 layout { … }。

设计视图工具栏:水平布局、垂直布局。组件树可右键「放入水平/垂直布局」「插入弹簧」。选中选项卡/堆叠的某一页时,可对该页整页套布局。

硬约束

  1. 绝对坐标(左边/顶边/宽高)是设计基准;进了布局后,运行时按约束重算。
  2. 菜单栏、工具栏、状态栏用各自的贴边,不要和普通停靠混用。
  3. 布局与弹簧没有 YSS 选择器。
  4. 代码里一般不用手改布局几何;需要时用控件的 停靠、左边 等属性(见各控件文档)。

三种办法,怎么选

做法 适合 窗口变大时
不设停靠、不进布局 固定工具窗、对话框 控件停在设计位置
停靠 上/下/左/右/填充 一块贴边(如底栏、整块填满) 贴边控件吃客户区边缘
水平/垂直布局 + 弹簧 工具条、表单、列表+详情随窗拉伸 按占比分摊剩余空间

多数业务窗:上面一条水平布局(按钮+弹簧)+ 中间填充的表格/浏览器。


停靠

属性面板「布局」→ 停靠:无 / 上 / 下 / 左 / 右 / 填充。

顺序:专用栏(菜单/工具/状态)先贴边 → 再排设了停靠的控件 → 其余保持设计坐标。

  • 上/下/左/右:贴在客户区该侧,厚度用设计时的宽或高。
  • 填充:吃掉停靠之后剩下的整块中间区域(常见:表格、浏览器、选项卡)。
  • 同一侧多个停靠会依次占用。

普通按钮不要每个都停靠;一排按钮请放进水平布局。


水平布局 / 垂直布局

放进去

  1. 多选同一父级下的控件(按住 Ctrl 点选,或框选)。
  2. 点工具栏 水平布局 或 垂直布局,或组件树右键「放入…布局」。
  3. 布局框会出现在设计器里(运行时通常看不见边框)。

也可先拖一个空布局,再把控件拖进框内(蓝色插入线:水平布局是竖线,垂直布局是横线)。

页内布局:选中选项卡或堆叠的当前页,再点水平/垂直布局,布局会铺满该页内容区。

嵌套:水平布局里再套垂直布局(例如左侧一列标签、右侧一列表单)。

布局自身属性

选中布局框(不要点到子控件)后,属性面板「布局」常见项:

属性 作用
左边距 / 上边距 / 右边距 / 下边距 布局内容区相对外框的内缩
间距 子项之间的空隙(像素)
布局占比 写给本布局的各个子项的权重,逗号分隔,如 0,1,2(见下)
拉伸 本布局相对父布局分摊剩余空间的权重;0 尽量保持设计尺寸

子控件在布局里的 对齐(水平/垂直)决定交叉轴:例如水平布局里标签垂直居中。

最小宽度 / 最小高度 / 最大宽度 / 最大高度:限制子项被压扁或拉得过大。


弹簧

弹簧吃掉「还没分完」的空档,把按钮顶到两侧或把一块内容顶下去。

  • 在布局中右键 插入弹簧,方向跟当前布局走(水平布局 → 水平弹簧)。
  • 水平:[确定] [取消] [弹簧] → 按钮靠左,右边留白随窗变宽。
  • 水平:[弹簧] [确定] → 按钮靠右。
  • 垂直:弹簧在列表和底栏之间,底栏贴底。

弹簧没有标题、也不走 YSS。不要给弹簧设边框。


布局占比与拉伸

剩余空间按权重分,不是按像素写死。

子项「拉伸」(选中按钮、文本框等):

  • 0:尽量用设计宽高(交叉轴仍可能被布局拉齐)。
  • >0:和兄弟里同样拉伸的项按数字比例分剩余空间。1 与 1 对半分;1 与 2 则 1:2。

布局上的「布局占比」:一串数字对应子项从左到右(或从上到下),例如三个子项写 0,1,1:第一项按内容/设计尺寸,后两项平分剩余。数字个数应与子项数量一致。

有弹簧时,弹簧会先参与分摊;固定按钮通常拉伸为 0。


分组框、选项卡、堆叠

子控件用 XML 的 所属容器 挂在容器上(设计器拖进去会自动写)。坐标相对容器内容区(分组框会扣掉标题栏)。

  • 分组框里再放垂直布局:标签+输入排成一列,分组框本身可停靠或进外层布局。
  • 选项卡:每一页可以有自己的布局;先点页再套布局。
  • 堆叠:只显示当前页,布局算法与选项卡页相同。

和绝对坐标一起用

场景 建议
登录框、固定大小对话框 绝对坐标即可,窗体禁止最大化
主界面随窗拉伸 根上用布局,或中间一块 停靠=填充
只拉伸中间表格 表格 停靠=填充,顶栏用水平布局
工具条按钮间距固定、右侧留白 水平布局 + 末尾弹簧

改窗口大小后,设计器会按同一套规则重排,和 F5 运行时一致。


XML 里长什么样

一般不用手改。设计器保存后类似:

<水平布局 名称="水平布局1" typeId="layouth" 左边="8" 顶边="8" 宽度="640" 高度="36" 间距="8">
</水平布局>
<按钮 名称="按钮1" typeId="button" 所属容器="水平布局1" 标题="确定".../>
<水平弹簧 名称="水平弹簧1" typeId="spacerh" 所属容器="水平布局1"/>
XML typeId
水平布局 layouth
垂直布局 layoutv
水平弹簧 spacerh
垂直弹簧 spacerv

子控件靠 所属容器="布局名称" 归属。停靠 写在普通控件上:无 / 上 / 下 / 左 / 右 / 填充。


易错对照

容易踩的 改法
每个控件都设停靠,叠在一起 一排控件用布局;中间大块才 填充
用 YSS 改 left/width 当排版 几何交给布局/停靠;YSS 只写颜色圆角
弹簧当按钮用、写标题 弹簧只占位
选项卡看起来没铺满 选中页再套布局,或选项卡停靠填充
文本框在水平布局里被压成一条线 设最小宽度,或布局占比给它权重

窗口 XML 结构见 window-xml.md。样式见 YSS.md。