아래 코드에서 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,)
],))
);
}
}
Remi가 제안한 두 가지 접근 방식은 “야생에서”작동하지 않는 것으로 보입니다. 다음은 행과 열 내부에 중첩 된 예입니다. 첫 번째 접근 방식은 정렬을 수행하지 않고 두 번째 접근 방식은 응용 프로그램이 충돌하게 만듭니다.
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
문제와 관련이 없습니다. 그것을 제거하는 것은 단순히 당신이 사용한 것보다 훨씬 큰 기본 스타일을 사용하여 문제를 숨 깁니다.
textAlign
차지하는 공간에서 텍스트를 정렬합니다. Text
점유 공간이 실제 콘텐츠보다 클 때 점유 공간 .
건은 내부에있다 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.stretch
on 을 지정 Column
하거나 SizedBox
무한 을 사용하여 width
.
Column(
children: <Widget>[
SizedBox(
width: double.infinity,
child: Container(
color: Colors.red,
child: Text(
"Should be left",
textAlign: TextAlign.left,
),
),
),
],
),
다음을 렌더링합니다.
이 예에서는 TextAlign
텍스트를 왼쪽에 배치했습니다.
답변
crossAxisAlignment: CrossAxisAlignment.start
열에 지정
답변
textAlign
속성은 Text
의 콘텐츠를 위한 공간이 더 남아있을 때만 작동 합니다. 다음은 textAlign이 영향을 미치는시기와 그렇지 않은 경우를 보여주는 두 가지 예입니다.
영향 없음
예를 들어,이 예에서는 .NET Framework의 콘텐츠를위한 추가 공간이 없기 때문에 영향을 미치지 않습니다 Text
.
Text(
"Hello",
textAlign: TextAlign.end, // no impact
),
영향을 미침
당신이 그것을 포장 하고 더 많은 여분의 공간을 갖도록 Container
여분을 제공 width
하는 경우.
Container(
width: 200,
color: Colors.orange,
child: Text(
"Hello",
textAlign: TextAlign.end, // has impact
),
)
답변
Colum 위젯에서 텍스트 정렬은 자동으로 중앙에 배치되므로 crossAxisAlignment: CrossAxisAlignment.start
시작 정렬에 사용하십시오 .
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(""),
Text(""),
]);
답변
alignment: Alignment.centerRight
컨테이너에서 설정 :
Container(
alignment: Alignment.centerRight,
child:Text(
"Hello",
),
)
답변
유연성을 극대화하기 위해 일반적으로 다음과 같이 SizedBox로 작업하는 것을 선호합니다.
Row(
children: <Widget>[
SizedBox(
width: 235,
child: Text('Hey, ')),
SizedBox(
width: 110,
child: Text('how are'),
SizedBox(
width: 10,
child: Text('you?'))
],
)
과거에 정렬을 사용할 때 텍스트 정렬에 문제가 있었지만 sizedbox는 항상 작업을 수행합니다.
답변
컨테이너를 사용할 수 있으며 정렬을 설정하는 데 도움이 될 것입니다.
Widget _buildListWidget({Map reminder}) {
return Container(
color: Colors.amber,
alignment: Alignment.centerLeft,
padding: EdgeInsets.all(20),
height: 80,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Container(
alignment: Alignment.centerLeft,
child: Text(
reminder['title'],
textAlign: TextAlign.left,
style: TextStyle(
fontSize: 16,
color: Colors.black,
backgroundColor: Colors.blue,
fontWeight: FontWeight.normal,
),
),
),
Container(
alignment: Alignment.centerRight,
child: Text(
reminder['Date'],
textAlign: TextAlign.right,
style: TextStyle(
fontSize: 12,
color: Colors.grey,
backgroundColor: Colors.blue,
fontWeight: FontWeight.normal,
),
),
),
],
),
);
}