控件的伸缩是指设置其grabExcessHorizontalSpace、grabExcessVerticalSpace 属性。
使Widget固定大小
- 设置成不可伸缩:grabExcessHorizontalSpace = false, grabExcessVerticalSpace = false
- 定义宽和高:layoutData.widthHint 和 layoutData.heightHint
Widget的大小由heightHint和widthHint决定。
使Widget在一定范围内自动伸缩
- 设置成自动伸缩:grabExcessHorizontalSpace = true, grabExcessVerticalSpace = true
- 定义缩放的最小宽度、高度:layoutData.minimumWidth 和 layoutData.minimumHeight
- 定义缩放的最大宽度、高度: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. 如果只有一个控件可伸缩,不用设置其最大缩放宽度和高度;如果有多个控件可伸缩,保留一个控件无限伸缩,其它的控件都限制其伸缩范围。