앱바 제목을 중앙에 배치하는 방법


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

제목이 중심이 아님

제목 텍스트가 두 아이콘 사이에 완벽하게 중앙에 오도록하는 솔루션을 원합니다.

답변:


295

iOS에서는 제목 중앙에 배치하는 것이 기본값입니다. Android에서 AppBar의 제목은 기본적으로 왼쪽 정렬이지만 생성자에 centerTitle: true인수로 전달 하여 재정의 할 수 있습니다 AppBar.

예:

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

5
이 경우 제목은 중앙에 정확히 나타나지 않습니다. /

이것은 나를 위해 제목의 정렬에도 영향을 미치지 않습니다.
Michael Tolsma

12

같은 문제가 있었고
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이 제대로 작동하지 않는 것 같습니다. 이것은 그것을 고쳤습니다.
Moti Bartov

나에게 더 간단한 솔루션보다 다른 효과는 없습니다. 제 경우에는 이미지 주위에 투명한 테두리 공간이 있으면 잘못된 배치가 발생합니다. 이미지를 조금 더 타이트하게 자르는 것만으로도 간단한 솔루션이 작동합니다.
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

많은 솔루션을 시도한 후 @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
오랜만에 문제가 해결되었습니다. 아주 간단합니다. 감사합니다.
Ravimaran

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

          ),
  )

여기에서 우리는 아이들을 센터링하기 위해 Rowwith 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: AppBar(
          title:  const Center(
            child: Text(
              "App Title",
              style: TextStyle( color: Colors.white,fontSize: 20),
            ),
          ),
        ),

앱 디스플레이에서 :

여기에 이미지 설명 입력



-2
appBar: AppBar(
    mainAxisAlignment: MainAxisAlignment.center,
)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.