Flutter crossAxisAlignment vs mainAxisAlignment

时间:2018-12-19 11:18:45

标签: flutter flutter-layout

I'm confused about crossAxisAlignment and mainAxisAlignment. Can anyone please explain it in simple words?

7 个答案:

答案 0 :(得分:13)

对于行:

mainAxisAlignment =水平轴
crossAxisAlignment =垂直轴

enter image description here


对于列:

mainAxisAlignment =垂直轴
crossAxisAlignment =水平轴

enter image description here

Image source

答案 1 :(得分:2)

Row/Column are associated to an axis:

  • Horizontal for Row
  • Vertical for Column

mainAxisAlignment is how items are aligned on that axis. crossAxisAlignment is how items are aligned on the other axis.

答案 2 :(得分:1)

ma​​inAxisAlignment 属性

mainAxisSize 设置为 MainAxisSize.max 时,RowColumn 可能会为其子项布置额外的空间。 mainAxisAlignment 属性决定了 Row 和 Column 如何在额外空间中放置它们的子项。 mainAxisAlignment 有六个可能的值:

示例:修改主轴对齐

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.start,
      children: [
        BlueBox(),
        BlueBox(),
        BlueBox(),
      ],
    );
  }
}

class BlueBox extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      width: 50,
      height: 50,
      decoration: BoxDecoration(
        color: Colors.blue,
        border: Border.all(),
      ),
    );
  }
}

enter image description here

crossAxisAlignment 属性

crossAxisAlignment 属性决定了 RowColumn 如何将其子项定位在其横轴上。 A Row 的横轴是垂直的,而 Column 的横轴是水平的。 crossAxisAlignment 属性有五个可能的值:

示例:修改横轴对齐

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.spaceAround,
      crossAxisAlignment: CrossAxisAlignment.center,
      children: [
        BlueBox(),
        BiggerBlueBox(),
        BlueBox(),
      ],
    );
  }
}

class BlueBox extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      width: 50,
      height: 50,
      decoration: BoxDecoration(
        color: Colors.blue,
        border: Border.all(),
      ),
    );
  }
}

class BiggerBlueBox extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      width: 50,
      height: 100,
      decoration: BoxDecoration(
        color: Colors.blue,
        border: Border.all(),
      ),
    );
  }
}

enter image description here

答案 3 :(得分:0)

使用Row时,其子级会水平排列。因此Row的主轴是水平的。 在mainAxisAlignment中使用Row,可以使行的子级水平对齐(例如,左,右)。 Row主轴的横轴是垂直的。因此,在crossAxisAlignment中使用Row可以定义其子级垂直对齐的方式。

Column中,情况恰恰相反。列的子级从上到下垂直排列(默认)。所以它的主轴是垂直的。这意味着,在mainAxisAlignment中使用Column可以使其子项垂直对齐(例如,顶部,底部),而crossAxisAlignment定义子项如何在该列中水平对齐。

答案 4 :(得分:0)

这两张图片清楚地显示了MainAxisAlignment和CrossAxisAlignment的含义。

enter image description here

enter image description here

(图片来自网络)

答案 5 :(得分:0)

中,

  • 垂直居中(或对齐),请使用 mainAxisAlignment
  • 水平居中(或对齐),请使用 crossAxisAlignment

中,

  • 水平居中(或对齐),请使用 mainAxisAlignment
  • 垂直居中(或对齐),请使用 crossAxisAlignment

答案 6 :(得分:0)

Oncept

取决于您希望如何将内容显示在屏幕上。我们需要使用 mainAxis 和 CrossAxis 对齐属性。

更多基本布局概念:https://flutter.dev/docs/codelabs/layout-basics