GridLayout布局 — 控制Widget大小

By | 2015年8月8日

控件的伸缩是指设置其grabExcessHorizontalSpace、grabExcessVerticalSpace 属性。

使Widget固定大小

  1. 设置成不可伸缩:grabExcessHorizontalSpace = false, grabExcessVerticalSpace = false
  2. 定义宽和高:layoutData.widthHint 和 layoutData.heightHint

Widget的大小由heightHint和widthHint决定。

使Widget在一定范围内自动伸缩

  1. 设置成自动伸缩:grabExcessHorizontalSpace = true, grabExcessVerticalSpace = true
  2. 定义缩放的最小宽度、高度:layoutData.minimumWidth 和 layoutData.minimumHeight
  3. 定义缩放的最大宽度、高度:layoutData.widthHint  和 layoutData.heightHint

Widget随着parent的大小,在一定范围内可自由伸缩。

使Widget包裹内部所有控件

调用pack() / pack(true)方法,根据内部所有控件的大小,计算出自己的最小大小。pack既是裹住,裹住内部的元素。

minimumWidth、minimumHeight和widthHint、heightHint的区别

  • minimumWidth和minimumHeight只是在grabExcessHorizontalSpace 、grabExcessVerticalSpace 为true的情况下有效,限定最小的宽度和高度。
  • widthHint和heightHint用于计算Control的preferred的size,控件的初始大小是由preferred size决定的。

最佳实践

个人总结:

1. 如果控件不可伸缩,且不pack(),一定要设置widthHint和heightHint。

2. 如果只有一个控件可伸缩,不用设置其最大缩放宽度和高度;如果有多个控件可伸缩,保留一个控件无限伸缩,其它的控件都限制其伸缩范围。