アプリバーのタイトルを中央に配置する方法


111

タイトルテキストを、先行アクションと後続アクションの両方があるアプリバーの中央に配置しようとしています。

@override
Widget build(BuildContext context) {
  final menuButton = new PopupMenuButton<int>(
    onSelected: (int i) {},
    itemBuilder: (BuildContext ctx) {},
    child: new Icon(
      Icons.dashboard,
    ),
  );

  return new Scaffold(
    appBar: new AppBar(
      // Here we take the value from the MyHomePage object that
      // was created by the App.build method, and use it to set
      // our appbar title.
      title: new Text(widget.title, textAlign: TextAlign.center),
      leading: new IconButton(
          icon: new Icon(Icons.accessibility),
          onPressed: () {},
      ),
      actions: [
        menuButton,
      ],
    ),
    body: new Center(
      child: new Text(
        'Button tapped $_counter time${ _counter == 1 ? '' : 's' }.',
      ),
    ),
    floatingActionButton: new FloatingActionButton(
      onPressed: _incrementCounter,
      tooltip: 'Increment',
      child: new Icon(Icons.add),
    ), // This trailing comma makes auto-formatting nicer for build methods.
  );
}

これは、次の図に示すようにタイトルが左側に配置されることを除いて、うまく機能します。

左にタイトル

タイトルを中央に含めようとすると、左に多すぎるようです。

@override
Widget build(BuildContext context) {
  final menuButton = new PopupMenuButton<int>(
    onSelected: (int i) {},
    itemBuilder: (BuildContext ctx) {},
    child: new Icon(
      Icons.dashboard,
    ),
  );

  return new Scaffold(
    appBar: new AppBar(
      // Here we take the value from the MyHomePage object that
      // was created by the App.build method, and use it to set
      // our appbar title.
      title: new Center(child: new Text(widget.title, textAlign: TextAlign.center)),
      leading: new IconButton(
          icon: new Icon(Icons.accessibility),
          onPressed: () {},
      ),
      actions: [
        menuButton,
      ],
    ),
    body: new Center(
      child: new Text(
        'Button tapped $_counter time${ _counter == 1 ? '' : 's' }.',
      ),
    ),
    floatingActionButton: new FloatingActionButton(
      onPressed: _incrementCounter,
      tooltip: 'Increment',
      child: new Icon(Icons.add),
    ), // This trailing comma makes auto-formatting nicer for build methods.
  );
}

タイトルが適切ではありません

タイトルテキストを2つのアイコンの中央に完全に配置するソリューションが欲しいです。

回答:


293

タイトルの中央揃えは、iOSのデフォルトです。Androidでは、AppBarタイトルはデフォルトで左揃えになっていますがcenterTitle: trueAppBarコンストラクターに引数として渡すことでオーバーライドできます。

例:

AppBar(
  centerTitle: true, // this is all you need
  ...
)

5
この場合、タイトルは正確には中央に表示されません:/

これは私にとってタイトルの配置にさえ影響しません。
Michael Tolsma

12

私は同じ問題を抱えていましたが、
mainウィジェットのサイズmainAxisSize:MainAxisSize.minを追加すると、ようやく機能しました。これが役に立てば幸いです!

 return new Scaffold(
      appBar: new AppBar(
        // Here we take the value from the MyHomePage object that
        // was created by the App.build method, and use it to set
        // our appbar title.
        title: Row(
          mainAxisAlignment: MainAxisAlignment.center,
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            Text(
              widget.title,
            ),
          ],
        ),

        leading: new IconButton(
          icon: new Icon(Icons.accessibility),
          onPressed: () {},
        ),
        actions: [
          menuButton,
        ],
      ),
    );
  }

8

ここに私が私のappbarにcenterTitleを作る方法があります:

@override
Widget build(BuildContext context) {
return Scaffold(
  appBar: new AppBar(
    centerTitle: true ,
    title: new Text("Login"),
  ),
  body: new Container(
    padding: EdgeInsets.all(18.0),
      key: formkey,
        child: ListView(
        children: buildInputs() + buildSubmitButton(),
      ),
   ) 
);
}

8

私の場合、テキストではなくロゴ/画像を中央に配置したいと考えました。この場合、centerTitle十分ではありません(理由がわからない、svgファイルがあるので、それが理由かもしれません...)。

appBar: AppBar(centerTitle: true, title: AppImages.logoSvg)

実際に画像を中央に配置しません(さらに、画像が大きくなりすぎるなど)。私にとってうまくいくのは、次のようなコードです。

appBar: AppBar(centerTitle: true,
    title: ConstrainedBox(
        constraints: BoxConstraints(maxHeight: 35, maxWidth: 200),
        child: AppImages.logoSvg)),

受け入れられた回答はテキストで機能しますが、これはカスタムウィジェットの正しい回答です。ありがとう!
sfratini

私のために働いた!ツールバーにアクションがあると、centerTitleが正しく機能しないようです。これで直った。
Moti Bartov

より単純なソリューション以外の効果はありません。私の場合、画像の周りに透明な境界線スペースがあると、正しく配置されません。画像を少しタイトにカットするだけで、シンプルなソリューションが機能しました。
rgisi

2

カスタムアプリバーのタイトルを作成する場合の別の方法を次に示します。たとえば、アプリバーの中央に画像とテキストを追加して、

appBar: AppBar(
          title: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Icon(
                Icons.your_app_icon,
                color: Colors.green[500],
              ),
              Container(
                  padding: const EdgeInsets.all(8.0), child: Text('YourAppTitle'))
            ],

          ),
  )

ここでは、子供たちを中心Rowとするwith MainAxisAlignment.centerを作成しました。次に、2つの子(アイコンとContainerテキスト付き)を追加しました。TextウィジェットをでラップしてContainer、必要なパディングを追加しました。


1
@override
Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
            title: Text('Title'),
            actions: <Widget> [
               IconButton(icon: const Icon(Icons.file_upload), onPressed: _pressed),
            ],
            leading: IconButton(icon: const Icon(Icons.list), onPressed: _pressed),
            centerTitle: true,
        )
        body: Text("Content"),
    );
}

1

多くの解決策を試した後、これは@Collin Jacksonの回答centerTitle: true に加えてサンプルコードを追加するのに役立ちました

build(BuildContext context)

これを行う

appBar: AppBar(
        // Here we take the value from the MyHomePage object that was created by
        // the App.build method, and use it to set our appbar title.
        title: Text(widget.title),centerTitle: true
      ),

1
しばらくして、これで問題は解決しました。とても簡単です。ありがとうございました。
ラビマラン

0

これは、センターでAppbar Title Textを作成するのに役立ちます。スタイルを使用して目的のスタイルを追加するか、不要な場合はコメントを付けることができます。

appBar: AppBar(
          title:  const Center(
            child: Text(
              "App Title",
              style: TextStyle( color: Colors.white,fontSize: 20),
            ),
          ),
        ),

アプリのディスプレイ上:

ここに画像の説明を入力してください



-3
appBar: AppBar(
    mainAxisAlignment: MainAxisAlignment.center,
)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.