Як центрувати заголовок панелі додатків


113

Я намагаюся відцентрувати текст заголовка на панелі додатків, що має як початкові, так і кінцеві дії.

@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.
  );
}

НАЗВА НЕ ДОБРО ЦЕНТРОВАНО

Я хотів би отримати рішення, щоб текст заголовка був ідеально відцентрований між двома піктограмами.

Відповіді:


308

Центрування заголовка є типовим для iOS. На Android AppBarзаголовок за замовчуванням вирівняний за лівим краєм, але ви можете замінити його, передавши centerTitle: trueяк аргумент AppBarконструктору.

Приклад:

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

6
у цьому випадку заголовок відображається не зовсім в центрі: /

Це навіть не впливає на вирівнювання заголовка для мене.
Майкл Толсма

13

У мене була та сама проблема, і вона нарешті спрацювала, коли я додав
mainAxisSize: MainAxisSize.min до свого віджета Row. Сподіваюся, це допоможе!

 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,
        ],
      ),
    );
  }

9

У моєму випадку я хотів мати логотип / зображення по центру замість тексту. У цьому випадку цього 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 не працює належним чином, коли на панелі інструментів є дії. Цей виправив це.
Моті Бартов

Не має для мене іншого ефекту, ніж більш просте рішення. У моєму випадку наявність прозорого кордону навколо зображення призводить до неправильного розміщення. Просто вирізання зображення трохи щільніше зробило просте рішення ефективним.
rgisi

8

Ось як я роблю 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(),
      ),
   ) 
);
}

2

Спробувавши багато рішень, це допомогло мені centerTitle: true додати зразок коду на додаток до відповіді @Collin Jackson

Приклад у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
Минув деякий час, це справді вирішило проблему. Дуже просто. Дякую.
Равімаран

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з MainAxisAlignment.centerцентром дітей. Потім ми додали двох дітей - піктограму та піктограму 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"),
    );
}

0

Це може допомогти у створенні тексту заголовка панелі додатків у Center. Ви можете додати бажані стилі за допомогою стилю або прокоментувати його, якщо це не потрібно.

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

На дисплеї програми:

введіть тут опис зображення


0

Ви можете відцентрувати заголовок appBar за допомогою параметра centerTitle .

centerTitle - це логічний тип даних, а значення за замовчуванням - False.

centerTitle : правда

Приклад:

import 'package:flutter/material.dart';

void main() {
  runApp(
    MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('App Title'),
          backgroundColor: Colors.red,
          centerTitle: true,
        ),
      ),
    ),
  );
}

введіть тут опис зображення




Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.