線性布局Row和Column


主軸和縱軸

對於線性布局,有主軸和縱軸之分,如果布局是沿水平方向,那么主軸是指水平方向,縱軸為垂直方向;如果布局沿垂直方向,那么主軸就是指垂直方向,縱軸為水平方向。在線性布局中,有兩個定義對齊方式的枚舉類MainAxisAlignment和CrossAxisAlignment,分別代表主軸對齊和縱軸對齊。

Row

Row可以在水平方向排列其子widget。定義如下:

Row({
  ...  
  TextDirection textDirection,    
  MainAxisSize mainAxisSize = MainAxisSize.max,    
  MainAxisAlignment mainAxisAlignment = MainAxisAlignment.start,
  VerticalDirection verticalDirection = VerticalDirection.down,  
  CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.center,
  List<Widget> children = const <Widget>[],
})

textDirection:表示水平方向子widget的布局順序(是從左往右還是從右往左),默認為系統當前Locale環境的文本方向。

mainAxisSize:表示Row在主軸方向占用的空間,默認是MainAxisSize.max,表示盡可能多的占用水平方向的空間,此時無論子widgets實際占用多少水平空間,Row的寬度始終等於水平方向的最大寬度;而MainAxisSize.min 表示盡可能少的占用水平空間,當子widgets沒有占滿水平剩余空間,則Row的實際寬度等於所有子widgets占用的水平空間;

MainAxisAlignment:表示子widgets在Row所占用的水平空間內對齊方式,如果MainAxisSize值為MainAxisSize.min,則此屬性無意義,因為子widgets的寬度等於Row的寬度。只有當MainAxisSize的值為MainAxisSize.max時,此屬性才有意義,MainAxisAlignment.start表示沿textDirection的初始方向對齊,如textDirection取值為textDirection.ltr時,則MainAxisAlignment.start表示左對齊,textDirection取值為TextDirection.rtl時表示從右對齊。而MainAxisAlignment.endMainAxisAlignment.start正好相反;MainAxisAlignment.center表示居中對齊。讀者可以這么理解:textDirection是mainAxisAlignment的參考系。

verticalDirection:表示Row縱軸(垂直)的對齊方向,默認是verticalDirection.down,表示從上到下。

crossAxisAlignment:表示子widgets在縱軸方向的對齊方式,Row的高度等於子widgets中最高的子元素高度,它的取值和MainAxisAlignment一樣(包含start、end、center三個值),不同的是crossAxisAlignment的參考是verticalDirection,即verticalDirection值為verticalDirection值為verticalDirection.down時,crossAxisAlignment.start指頂部對齊,verticalDirection值為verticalDirection.up時,crossAxisAlignment.start指底部對齊。

Column

參數和Row一樣,不同的是布局方向是垂直,主軸縱軸正好相反,可類比Row來理解。

注意:如果Row里面嵌套Row,或者Column里面嵌套Column,那么只有對最外面的Row或Column會占用盡可能大的空間,里面的所占空間為實際大小。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM