当前位置: 首页 > 知识库问答 >
问题:

如何在flatter中对齐单个小部件?

吴镜
2023-03-14

我想将颤振小部件与其父部件对齐。我知道我可以通过将小部件包装在中心小部件中来将其居中。

  Center(
    child: Text("widget"),
  )

但我如何将其与右侧、底部、顶部中间等对齐?

笔记:

我说的是一个孩子,而不是一行或一列中的多个孩子。见以下问题:

  • 对齐行小部件中的文本小部件
  • 颤振|右对齐不工作

这一条是正确的,但我试图提出一个更尖锐的问题:

  • 如何在Flatter中左对齐OutlineButton图标

共有3个答案

萧树
2023-03-14

您可以将定位对齐堆栈小部件一起使用

堆栈允许您将元素堆叠在彼此的顶部,数组中的最后一个元素的优先级最高。您可以使用对齐定位容器来定位堆栈的子级。

排列

通过使用具有静态属性(如topCenter、底部右侧等)的对齐设置对齐来移动小部件。或者您可以完全控制并设置对齐(1.0,-1.0),其中x, y值范围从1.0到-1.0,(0,0)是屏幕的中心。

Stack(
    children: [
        MyWidget(),
        Align(
            alignment: Alignment.topCenter,
            child: MyWidget(),
        ),
        Container(
            alignment: Alignment(-0.9, -0.9),
            child: MyWidget(),
        )  
    ]
);

定位

作为对齐的替代方法,您可以相对于父窗口小部件定位子窗口小部件。

ConstrainedBox(
  constraints: BoxConstraints.tight(Size(double.infinity, 256)),
  child: Stack(
    alignment: AlignmentDirectional.center,
    children: <Widget>[
      Positioned(
        top: 0.0,
        child: Icon(Icons.calendar_today,
            size: 128.0, color: Colors.lightBlueAccent),
      ),
      Positioned(
          top: 4,
          right: 110,
          child: CircleAvatar(radius: 16, backgroundColor: Colors.red)),
    ],
  ),
)
侯沈义
2023-03-14
  Expanded(
    child: Align(
      alignment: Alignment.centerRight,
      child: Text("widget"),
    ),
  )
霍锦
2023-03-14

要在父窗口小部件中对齐子窗口小部件,请使用align窗口小部件。如果您知道如何使用Center小部件,那么您是正确的,因为Center只是Align的一个特例。

包装要与align小部件对齐的小部件,并设置其对齐属性。例如,这会将文本小部件与父窗口的右中对齐。

Align(
  alignment: Alignment.centerRight,
  child: Text("widget"),
)

其他选择包括

  • Alignment.top左
  • lignment.top中心
  • Alignment.top对
  • 左lignment.center
  • lignment.center
  • 一个lignment.center对
  • 左lignment.bottom
  • lignment.bottom中心
  • 一个lignment.bottom对

看起来是这样的:

您不仅限于这些位置。通过指定一个x, y对,其中(0,0)是视图的中心,边缘是围绕它的1.0单元。也许一张图片会有所帮助:

其中对于任何相对位置(x, y)

  • 对齐。左上方是对齐(-1.0,-1.0)
  • 对齐。topCenter对齐(0.0,-1.0)
  • 对齐。右上角是对齐(1.0,-1.0)
  • 对齐。中间偏左是对齐(-1.0,0.0)
  • 对齐。中心对齐(0.0,0.0)
  • 对齐。中心右侧是对齐(1.0,0.0)
  • 对齐。左下是对齐(-1.0,1.0)
  • 对齐。底部中心是对齐(0.0,1.0)
  • 对齐。右下对齐(1.0,1.0)

请注意,在图像中对齐方式(x,y)不需要在范围[-1,1]内。对齐方式(1,2)意味着它位于小部件的右侧,并且在小部件的下方是其高度的一半。

以下是html" target="_blank">自定义对齐位置的示例。

Align(
  alignment: Alignment(0.7, -0.5),
  child: Text("widget"),
)

这里是主菜单。省道用于制作上述示例的代码,以方便剪切和粘贴。

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(),
        body: myLayoutWidget(),
      ),
    );
  }
}

Widget myLayoutWidget() {
  return Align(
    alignment: Alignment(0.7, -0.5),
    child: Text(
      "widget",
      style: TextStyle(fontSize: 30),
    ),
  );
}
 类似资料:
  • 我使用的是flatter,我想给一个小部件添加一个边框(在本例中是widget)。 我尝试了和,但没有看到如何添加边框。

  • 问题内容: 我是HTML的新手,正在尝试学习如何使用表单。 到目前为止,我最大的问题是对齐表格。这是我当前的HTML文件的示例: 问题在于,“电子邮件”后的字段框与名字和姓氏相比在空格方面有很大不同。使其真正“排队”的“正确”方法是什么? 我正在尝试练习良好的格式和语法…很多人可能不确定使用CSS来做到这一点,到目前为止,我仅了解HTML的基本知识。 问题答案: 另一个使用CSS的示例,我只是将表

  • 我试图在一个div中放两个跨度,每边一个,都与div的底部对齐,而不使用绝对定位(因为这忽略了填充等,我总是在使用它后感觉不好)。右跨度中的文本比左跨度中的文本高。如果我使用垂直对齐来定位它们,如果它们都是浮动的,就不会受到影响,但是如果它们都没有浮动,它们就不会正确地水平对齐。我不能保证两个跨度中的哪一个会有更多的文本。 http://jsfiddle.net/gsvfn07f/

  • 问题内容: 我需要居中对齐水平菜单。 我尝试了各种解决方案,包括/ / 等等的组合,但是没有成功。 这是我的代码: 更新 我知道如何中心对齐的内部。可以使用Sarfraz的建议来完成。但是列表项仍然浮动在内。 我需要Java语言来完成此操作吗? 问题答案: 前提很简单,基本上只涉及一个无宽度的浮动包装,该浮动包装浮动到左侧,然后从屏幕上移到左侧的宽度位置。左:-50%。接下来,将嵌套的内部元素反转

  • 我试图用Swing在Java中创建一个表单,但我在管理布局方面遇到了困难。 我想在对话框的中心有几个带标签的文本字段,在右下角有“保存”和“关闭”按钮。 将按钮添加到对话框右下角很简单,但我不确定如何将文本字段居中对齐。我想,如果没有中心组件方法,那么我可能可以通过计算对话框窗口的中心,然后在对话框重新调整大小时更新位置来对齐字段。但我对swing还不熟悉,我不知道该怎么做(或者这是否是个好主意)

  • 问题内容: 我有一张表格,其中一列包含十进制数字。我希望以类似于文字处理器的“十进制制表符”功能的方式对齐它们,以便所有点都位于一条垂直线上。 我目前有两种可能的解决方案,但我希望有更好的解决方案… 解决方案1:在HTML中拆分数字,例如 与 (是的,此解决方案不能完全按原样工作。但是,此概念是有效的。) 解决方案2:我发现提到 根据参考页,这是HTML4的一部分,但是在我必须使用的浏览器FF3.