在哪种情况下,textAlign属性可在Flutter中工作?
在下面的代码中,textAlign
属性不起作用。如果您删除DefaultTextStyle
上面几个级别的包装器,则textAlign
开始
工作。
为什么以及如何确保它始终有效?
import 'package:flutter/material.dart';void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new DefaultTextStyle(style: new TextStyle(fontSize: 10.0), child: new Column(children: <Widget>[
new Text("Should be left", textAlign: TextAlign.left,),
new Text("Should be right", textAlign: TextAlign.right,)
],))
);
}
}
雷米建议的两种方法显然都无法“在野外”工作。这
是我同时在行和列中嵌套的示例。第一种方法不
对齐,第二种方法使应用程序崩溃:
import 'package:flutter/material.dart';void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return new Directionality(textDirection: TextDirection.ltr, child: new DefaultTextStyle(
style: new TextStyle(fontSize: 10.0, color: Colors.white),
child: new Column(children: <Widget>[
new Row(children: <Widget>[
new Container(color: Colors.grey, child: new Column(children: <Widget>[
new Align(alignment: Alignment.centerLeft, child: new Text("left")),
new Align(alignment: Alignment.centerRight, child: new Text("right")),
],)),
new Container(color: Colors.grey, child: new Column(children: <Widget>[
new Align(alignment: Alignment.centerLeft, child: new Text("left")),
new Align(alignment: Alignment.centerRight, child: new Text("right")),
],)),
],),
/*new Row(children: <Widget>[
new Container(color: Colors.grey, child: new Column(children: <Widget>[
new SizedBox(width: double.infinity, child: new Text("left", textAlign: TextAlign.left,)),
new SizedBox(width: double.infinity, child: new Text("right", textAlign: TextAlign.right)),
],)),
new Container(color: Colors.grey, child: new Column(children: <Widget>[
new SizedBox(width: double.infinity, child: new Text("left", textAlign: TextAlign.left)),
new SizedBox(width: double.infinity, child: new Text("right", textAlign: TextAlign.right)),
],)),
],)*/]
)));
}
}
即,文本居中,而忽略Align元素的对齐方式。
回答:
DefaultTextStyle
与问题无关。删除它仅使用默认样式,该样式比您使用的默认样式大得多,因此隐藏了
问题。
textAlignText
当占用的空间大于实际内容时,将文本对齐。
问题是,在内Column,您Text仅占用最小的空间。它是那么Column,使用对齐其子crossAxisAlignment
,其默认为center
。
捕获此类行为的一种简单方法是将文本包装成这样:
Container( color: Colors.red,
child: Text(...)
)
使用您提供的代码,呈现以下内容:
问题突然变得很明显:Text不要占用整个Column宽度。
您现在有一些解决方案。
您可以将自己包装Text
成Align
模仿textAlign
行为
Column( children: <Widget>[
Align(
alignment: Alignment.centerLeft,
child: Container(
color: Colors.red,
child: Text(
"Should be left",
),
),
),
],
)
或者,您也可以强制Text填充Column宽度。
通过指定crossAxisAlignment: CrossAxisAlignment.stretchonColumn
或SizedBox与infinite
一起使用width
。
Column( children: <Widget>[
SizedBox(
width: double.infinity,
child: Container(
color: Colors.red,
child: Text(
"Should be left",
textAlign: TextAlign.left,
),
),
),
],
),
呈现以下内容:
在该示例中,就是TextAlign将文本放在左侧。
以上是 在哪种情况下,textAlign属性可在Flutter中工作? 的全部内容, 来源链接: utcz.com/qa/423839.html