对于一个屏幕视图来说,屏幕始终是根元件,然后包含多级子元件,形成一颗元件树。
约束
约束是尺寸的限制,也就允许最大与最小尺寸范围。约束是由上而下的,也就是父约束子,子约束孙。对于一个元件B,其父元件A,其子元件C,我们可以说B的约束来自于A,C的约束来自由B。反过来,A约束B,B约束C。
那么有哪些约束类型呢?
- tight型约束:这种约束的最大值与最小值相等,使得子元件没有自由决定权。比如作根元素屏幕,它的约束就是强制子元件与自己一样大,不能再大,也不能再小。
- loose型约束:允许子元件有一定的变化范围。比如Center,它约束子元件在不超过自己的前提下,自由设置尺寸。
- unlimited:允许子元件任意设置尺寸,大可以到无穷大,小也可以无穷小。比如Column。但是子元件超出屏幕,运行时会越界异常,编译时不会。
对于元件的嵌套要注意以下几种情况:
- 可滚动性元件:需要对容器尺寸的限制,所以它的父元件的约束不能是unlimited,可以是其它类型。比如ListView
- 贪婪性元件:有些元件的尺寸,在某些情况下,会根据父容器的约束尽可能大。所以它不能放在约束为unlimited的容器中。