Jak wyśrodkować tytuł paska aplikacji


120

Próbuję wyśrodkować tekst tytułu na pasku aplikacji, który ma zarówno początkową, jak i końcową akcję.

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

Działa to dobrze, z wyjątkiem tego, że tytuł jest wyrównany do lewej, jak pokazano na tym obrazku:

TYTUŁ W LEWO

Kiedy staram się umieścić tytuł pośrodku, okazuje się, że jest za bardzo w lewo:

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

TYTUŁ NIE DOBRZE CENTRUM

Bardzo chciałbym znaleźć rozwiązanie, dzięki któremu tekst tytułu będzie idealnie wyśrodkowany między 2 ikonami.

Odpowiedzi:


331

Wyśrodkowanie tytułu jest ustawieniem domyślnym w iOS. W systemie Android AppBartytuł jest domyślnie wyrównany do lewej, ale można go zastąpić, przekazując centerTitle: truejako argument do AppBarkonstruktora.

Przykład:

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

6
w tym przypadku tytuł nie pojawia się dokładnie w środku: /

Nie wpływa to nawet na wyrównanie tytułu dla mnie.
Michael Tolsma

14

Miałem ten sam problem i w końcu zadziałał, kiedy dodałem
mainAxisSize: MainAxisSize.min do mojego widżetu Row. Mam nadzieję, że to pomoże!

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

11

W moim przypadku chciałem wyśrodkować logo / obraz zamiast tekstu. W tym przypadku centerTitleto za mało (nie wiem czemu, mam plik svg, może to jest powód ...), więc na przykład tak:

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

nie wyśrodkowuje obrazu (dodatkowo obraz może być zbyt duży itp.). To, co działa dobrze, to taki kod:

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

Zaakceptowana odpowiedź działa w przypadku tekstu, ale jest to właściwa odpowiedź w przypadku niestandardowych widżetów. Dzięki!
sfratini

Pracował dla mnie! Wygląda na to, że centerTitle nie działa poprawnie, gdy na pasku narzędzi są działania. Ten naprawił to.
Moti Bartov

Nie ma dla mnie innego efektu niż prostsze rozwiązanie. W moim przypadku przezroczysta ramka wokół obrazu prowadzi do nieprawidłowego umieszczenia. Proste przycięcie obrazu nieco mocniej sprawiło, że proste rozwiązanie zadziałało.
rgisi

8

Oto jak tworzę centerTitle na pasku aplikacji:

@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

Po wypróbowaniu wielu rozwiązań pomogło mi to centerTitle: true dodać przykładowy kod oprócz odpowiedzi @Collin Jackson

Przykład wbuild(BuildContext context)

Zrób to

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
Minęło trochę czasu, to rozwiązało problem. Bardzo prosta. Dziękuję Ci.
Ravimaran

2

Oto inne podejście, jeśli chcesz utworzyć niestandardowy tytuł paska aplikacji. Na przykład chcesz, aby obraz i tekst znajdowały się na środku paska aplikacji, a następnie dodaj

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'))
            ],

          ),
  )

Tutaj stworzyliśmy Rowz, MainAxisAlignment.centeraby wyśrodkować dzieci. Następnie dodaliśmy dwoje dzieci - ikonę i Containerz tekstem. Zawinąłem Textwidżet w, Containeraby dodać niezbędne wypełnienie.


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

Może to pomóc w tworzeniu tekstu tytułu paska aplikacji w środku. Możesz dodać żądane style za pomocą stylu lub skomentować je, jeśli nie są potrzebne.

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

Na wyświetlaczu aplikacji:

wprowadź opis obrazu tutaj


0

Możesz wyśrodkować tytuł appBar za pomocą centerTitle parametru .

centerTitle to Boolean Datatype, a wartość domyślna to False.

centerTitle : true

Przykład:

import 'package:flutter/material.dart';

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

wprowadź opis obrazu tutaj




-4
appBar: AppBar(
    mainAxisAlignment: MainAxisAlignment.center,
)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.