Flutter布局中Expanded使用

栏目: IOS · Android · 发布时间: 7年前

内容简介:在flutter 中对 Expanded 使用 来平分布局占用比例(相当于Android里面的LinearLayout 控件中设置权重),但是在使用中遇到一些坑,然后就开始了踩坑之旅...........二种 Column 包含 Expanded ,但是 Text 内容增加,如果不加 maxLines: 3, 它会自动换行。如果不设置crossAxisAlignment属性值 那么 new Text("无Expanded一半"), 这个控件会居中 ,因为 Column 中的crossAxisAlignme

在flutter 中对 Expanded 使用 来平分布局占用比例(相当于Android里面的LinearLayout 控件中设置权重),但是在使用中遇到一些坑,然后就开始了踩坑之旅...........

Column

一种 Column 包含 Expanded 正常显示

Widget _columnExpanded(){
    return new Column(
      children: <Widget>[

        new Expanded(child: new Text("有Expanded一半")),

        new Text("无Expanded一半"),

      ],
    );
  }
复制代码

二种 Column 包含 Expanded ,但是 Text 内容增加,如果不加 maxLines: 3, 它会自动换行。如果不设置crossAxisAlignment属性值 那么 new Text("无Expanded一半"), 这个控件会居中 ,因为 Column 中的crossAxisAlignment 默认值是全部居中

Widget _columnMoreExpanded(){
    return new Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[

        new Expanded(
            child: new Text("有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,"
                "有Expanded一半,有Expanded一半有Expanded一半,有Expanded一半,有Expanded一半",
              maxLines: 3,
            )
        ),

        new Text("无Expanded一半"),

      ],
    );
  }
复制代码

三种 Column 包含 Expanded ,但在Expanded中使用Column来加载多控件, 显示正常

/*
 * Expanded 嵌套Column控件  然后Column 控件里面放两个 Text 会出现
 * 
 */
Widget _columnExpandedMoreWidget(){
  return new Column(
    children: <Widget>[

      new Expanded(
          child: new Column(
            children: <Widget>[
              new Text("有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,",
                maxLines: 2,
                overflow: TextOverflow.ellipsis,
              ),
              new Text("有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,",
                maxLines: 1,
                overflow: TextOverflow.ellipsis,
              )
            ],
          )
      ),

      new Text("无Expanded一半"),

    ],
  );
}
复制代码

四种 Column 包含 Expanded,只对 Expanded 里面的Row 加入一个 Expanded 这时屏幕上就会出现,如下图情况:(超出屏幕)

Widget _columnExpandedMoreRowWidget(){
 return new Column(
   children: <Widget>[

     new Expanded(
         child: new Row(
           children: <Widget>[
             new Expanded(child: new Text("有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,",
               maxLines: 2,
               overflow: TextOverflow.ellipsis,
             )),
             new Text("有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,",
               maxLines: 1,
               overflow: TextOverflow.ellipsis,
             )
           ],
         )
     ),

     new Text("无Expanded一半"),

   ],
 );
}
复制代码

看到超出屏幕,于是将 Row 中的两个 Text 控件都加上 Expanded ,代码如下:

Widget _columnExpandedMoreRowWidget1(){
 return new Column(
   children: <Widget>[

     new Expanded(
         child: new Row(
           children: <Widget>[
             new Expanded(child: new Text("有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,",
               maxLines: 2,
               overflow: TextOverflow.ellipsis,
             )),
             new Expanded(child: new Text("有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,",
               maxLines: 1,
               overflow: TextOverflow.ellipsis,
             )),
           ],
         )
     ),

     new Text("无Expanded一半"),

   ],
 );
}
复制代码

超出屏幕的提示消除。如图

于是将 Expanded 中 Row 子控件 其中的一个 Text 内容减少,代码如下: 如图:

Widget _columnExpandedMoreRowWidget1(){
 return new Column(
   children: <Widget>[

     new Expanded(
         child: new Row(
           children: <Widget>[
             new Expanded(child: new Text("有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,",
               maxLines: 2,
               overflow: TextOverflow.ellipsis,
             )),
             new Expanded(child: new Text("有Expanded一半",
               maxLines: 1,
               overflow: TextOverflow.ellipsis,
             )),
           ],
         )
     ),

     new Text("无Expanded一半"),

   ],
 );
}
复制代码

平分的确算是平分了,但是没有达到效果,又修改: 代码如下:

Widget _columnExpandedMoreRowWidget1(){
 return new Column(
   children: <Widget>[

     new Expanded(
         child: new Row(
           children: <Widget>[
             new Expanded(child: new Text("有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,",
               maxLines: 2,
               overflow: TextOverflow.ellipsis,
             )),
             new Text("有Expanded一半有Expanded一半有Expanded一半",
               maxLines: 2,
               overflow: TextOverflow.ellipsis,
             ),
           ],
         )
     ),
     new Text("无Expanded一半"),
   ],
 );
}
复制代码

在 Row 中去掉一个 Expanded 设置,就变成了

但是,问题又来了,去掉一个 Expanded 设置后 Text 不能自动换行。目前没有找到解决办法。。。。除非使用前面那个办法 加两个Expanded 但是这样就是平分天下了

Row

在Row中 Column 的第四种 说明了 Row 一行的排列出现的问题,还是 Text 不换行

Widget _rowExpandedMoreWidget(){
 return new Row(
   children: <Widget>[

     new Expanded(
         child: new Row(
           children: <Widget>[
             new Expanded(child: new Text("有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,",
               maxLines: 2,
               overflow: TextOverflow.clip,
             ),),
             new Expanded(child: new Text("有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,有Expanded一半,",
               maxLines: 2,
               overflow: TextOverflow.clip,
             ),),
           ],
         )
     ),

     new Text("无Expanded一半"),

   ],
 );
}
复制代码

通过以上列子 说明 Row 中 要横向的两个控件 要么平分 ,要么 Row 中的另外一个控件宽度不能太长,不然超出边界不能显示,在Column中始终能自动换行


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Ant Colony Optimization

Ant Colony Optimization

Marco Dorigo、Thomas Stützle / A Bradford Book / 2004-6-4 / USD 45.00

The complex social behaviors of ants have been much studied by science, and computer scientists are now finding that these behavior patterns can provide models for solving difficult combinatorial opti......一起来看看 《Ant Colony Optimization》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

随机密码生成器
随机密码生成器

多种字符组合密码