# 缺省子控件的布局器 ## 一、语法 子控件布局器统一使用 children_layout 属性指定,其语法为: ``` 缺省子控件布局器 => default '(' PARAM_LIST ')' PARAM_LIST => PARAM | PARAM ',' PARAM_LIST ``` 示例: ``` ``` ## 二、参数 缺省子控件的布局器提供了下列参数: | 参数 | 简写 | 说明 | | -------------- | :---: | :--------------------------------------------------------- | | rows | r | 行数 | | cols | c | 列数 | | width | w | 子控件的宽度,可以用来计算列数,与 cols 互斥 | | height | h | 子控件的高度,可以用来计算行数,与 rows 互斥 | | x\_margin | xm | 水平方向的边距 | | y\_margin | ym | 垂直方向的边距 | | spacing | s | 子控件之间的间距 | | flexible | f | 一行或一列放不下时,是否再另起一行或一列(缺省否) | | keep_invisible | ki | 是否给不可见的控件留位置(缺省否) | | keep_disable | kd | 是否给不用的控件留位置(缺省是) | | align_h | a | 用于 hbox 的情况 (col=0,row=1), 子控件整体水平对齐的方式。 | 在代码中,可以通过 widget\_set\_children\_layout 函数启用子控件布局器: ``` /** * @method widget_set_children_layout * 设置子控件的布局参数。 * @annotation ["scriptable"] * @param {widget_t*} widget 控件对象。 * @param {const char*} params 布局参数。 * * @return {ret_t} 返回 RET_OK 表示成功,否则表示失败。 */ ret_t widget_set_children_layout(widget_t* widget, const char* params); ``` 示例: ``` widget_set_children_layout(w, "default(r=2,c=2)"); ``` 在 XML 中,可以通过 children\_layout 属性设置: ``` ``` ## 三、使用方法 下面我们看看,如何调整 rows/cols 两个参数,来实现不同的布局方式。 ### 0. 缺省 在没有设置子控件布局参数时,采用缺省的布局方式,父控件啥事也不做,完全由子控件自己的布局参数决定。 ### 1. hbox 水平布局 当 rows=1,cols=0 时,所有子控件在水平方向排成一行,可以实现水平布局功能。子控件的参数: * x 从左到右排列,由布局参数计算而出。 * y 为 y\_margin * w 由子控件自己决定。 * h 为父控件的高度-2*y\_margin > 子控件需要自己决定宽度。 > aligh_h 参数可以控制整体对齐方式。 示例: ```