Bir uygulama çubuğunun başlığı nasıl ortalanır


124

Başlık metnini hem önde gelen hem de takip eden eylemleri olan bir uygulama çubuğunda ortalamaya çalışıyorum.

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

Bu, bu resimde gösterildiği gibi başlığın sola hizalanması dışında iyi çalışır:

SOLA BAŞLIK

Başlığı merkeze eklemeye çalıştığımda, çok fazla solda görünüyor:

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

BAŞLIK İYİ MERKEZİ DEĞİL

Başlık metnini 2 simge arasında mükemmel bir şekilde ortalamak için bir çözüm olmasını isterim.

Yanıtlar:


346

Başlığı ortalamak, iOS'ta varsayılandır. Android'de, AppBarbaşlığı varsayılan olarak sola hizalıdır, ancak yapıcıya centerTitle: trueargüman olarak ileterek bunu geçersiz kılabilirsiniz AppBar.

Misal:

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

6
bu durumda başlık tam olarak ortada

Bu benim için başlığın hizalamasını bile etkilemiyor.
Michael Tolsma

15

Aynı sorunu yaşadım ve sonunda
mainAxisSize: MainAxisSize.min'i Row widget'ıma eklediğimde çalıştı . Umarım bu yardımcı olur!

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

12

Benim durumumda, bir metin yerine ortalanmış bir logo / resim olmasını istedim. Bu durumda, centerTitleyeterli değil (neden emin değilim, bir svg dosyam var, belki sebebi budur ...), yani örneğin, bu:

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

görüntüyü gerçekten ortalamayacaktır (ayrıca görüntü çok büyük olabilir, vb.). Benim için işe yarayan şey şuna benzer bir koddur:

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

Kabul edilen yanıt Metin için geçerlidir ancak bu, özel Pencere Öğeleri için doğru yanıttır. Teşekkürler!
sfratini

Benim için çalıştı! Araç çubuğunda eylemler olduğunda centerTitle düzgün çalışmıyor gibi görünüyor. Bu onu düzeltti.
Moti Bartov

Benim için daha basit çözümden başka bir etkisi yok. Benim durumumda, görüntünün etrafında şeffaf kenar boşluklarının olması yanlış yerleştirmeye neden oluyor. Görüntüyü biraz daha sıkı kesmek basit çözümün işe yaramasını sağladı.
rgisi

8

Uygulama çubuğumda centerTitle'ı şu şekilde yaparım:

@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

Birçok çözümü denedikten sonra bu centerTitle: true , @ Collin Jackson yanıtına ek olarak örnek kod eklememe yardımcı oldu

Örnek olarakbuild(BuildContext context)

Bunu yap

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
Uzun zaman oldu, bu sorunu çözdü. Çok basit. Teşekkür ederim.
Ravimaran

2

Özel bir uygulama çubuğu başlığı oluşturmak istiyorsanız işte farklı bir yaklaşım. Örneğin, uygulama çubuğunun ortasında bir resim ve bir metin istiyorsanız, ardından

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

          ),
  )

Burada bir Rowile oluşturdukMainAxisAlignment.center çocukları merkezlemek için . Sonra iki çocuk ekledik - Bir Simge ve bir Containermetin içeren. Ben sarılmış Textwidget Containergerekli dolgu ekleyin.


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

CenterTitle kullanarak bir appBar başlığını ortalayabilirsiniz parametresini .

centerTitle , Boolean Veri ve varsayılan değer .

centerTitle : true

Misal :

import 'package:flutter/material.dart';

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

görüntü açıklamasını buraya girin



1

appBar'ın başlık merkezi şovu için kendi bool koşulu vardır,

görüntü açıklamasını buraya girin

öyleyse, eğer doğruyu ayarlarsan

  appBar: AppBar(
    title: Text(
      "header Text",
      style: TextStyle(color: Colors.black),
    ),
    centerTitle: true,
  ),

daha sonra merkez olacak, sonra varsayılan sola hizala (android'de) ios set center (varsayılan olarak).


0

Bu, Appbar Başlık Metninin Merkezde oluşturulmasına yardımcı olabilir. Stili kullanarak istediğiniz Stilleri eklemeyi seçebilir veya gerekmiyorsa yorum yapabilirsiniz.

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

Uygulama Ekranında:

görüntü açıklamasını buraya girin


-3

CenterNesne kullan

    appBar: AppBar(
      title: Center(
        child: const Text('Title Centered')
      )
    )

Çalışmıyor, çünkü böyle olmaması gerekiyor.
Daniyal Ahmad

-4
appBar: AppBar(
    mainAxisAlignment: MainAxisAlignment.center,
)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.