[解決済み] FlutterでtextAlignプロパティはどのような状況で動作しますか?
質問
以下のコードで
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 が提案した両方のアプローチは、どうやら "in the wild" では動作しないようです。以下は、行と列の内部で両方をネストした例です。最初のアプローチでは整列されず、2 番目のアプローチではアプリケーションがクラッシュします。
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
で
Column
を使用するか、または
SizedBox
を使うか、あるいは無限の
width
.
Column(
children: <Widget>[
SizedBox(
width: double.infinity,
child: Container(
color: Colors.red,
child: Text(
"Should be left",
textAlign: TextAlign.left,
),
),
),
],
),
とすると、次のようにレンダリングされます。
その例では
TextAlign
で、テキストを左に配置しています。
関連
-
[解決済み] Flutter TextButton splashColor プロパティ
-
[解決済み] Flutter give コンテナ 丸みを帯びたボーダー
-
flutter,コマンド PhaseScriptExecution が 0 以外の終了コードで失敗しました。
-
[解決済み] Flutterで丸みを帯びたボタン/border-radius付きボタンを作成する
-
Solve flutter Android ライセンスの状態が不明です。Android SDK Managerを再インストールまたはアップデートしてみてください。
-
[解決済み】起動ロックを解除するために別のflutterコマンドを待機する
-
[解決済み] ポップアップ時にFlutterナビゲータの状態を再読み込みするように強制する
-
[解決済み] ListViewの最後までプログラム的にスクロールさせる
-
[解決済み] フラッターは2つのアイテムを左と右の両極端に配置します。
-
[解決済み] Flutter FirestoreでD8が発生:要求されたクラスを単一のdexファイルに収められない (# methods: 71610 > 65536) in Android Studio
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Dartは参照渡しになりますか?[重複あり]
-
flutter,コマンド PhaseScriptExecution が 0 以外の終了コードで失敗しました。
-
[解決済み】メッセージ「flutter run: 接続されたデバイスがありません"
-
[解決済み】Flutter - オーバーフロー時にテキストを折り返し、省略記号の挿入やフェードを行う
-
[解決済み】Flutterのテキストウィジェットの下に黄色い線が?
-
[解決済み] ボタンの幅を親と同じにするには?
-
[解決済み] Flutterでボタンの幅と高さを設定する方法は?
-
[解決済み] ポップアップ時にFlutterナビゲータの状態を再読み込みするように強制する
-
[解決済み] ListViewの最後までプログラム的にスクロールさせる
-
[解決済み] 依存関係がヌルセーフティをサポートしていないため、サウンドヌルセーフティで実行できない