如何使应用栏的标题居中
How to center the title of an appbar
我正在尝试将标题文本置于同时具有前导和尾随操作的应用栏中。
@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 个图标之间完美居中。
标题居中是 iOS 上的默认设置。在 Android 上,AppBar
的标题默认为 left-aligned,但您可以通过将 centerTitle: true
作为参数传递给 AppBar
构造函数来覆盖它。
示例:
AppBar(
centerTitle: true, // this is all you need
...
)
如果您想创建自定义应用栏标题,可以使用另一种方法。例如,您想要在应用栏的中心放置一个图像和一个文本,然后添加
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
来居中 children。然后我们添加了两个 children - 一个图标和一个带文本的 Container
。我将 Text
小部件包装在 Container
中以添加必要的填充。
我遇到了同样的问题,当我添加
时终于成功了
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,
],
),
);
}
以下是我在应用栏上制作 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(),
),
)
);
}
使用Center
对象
appBar: AppBar(
title: Center(
child: const Text('Title Centered')
)
)
@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"),
);
}
在尝试了许多解决方案后,这对我有所帮助 centerTitle: true
除了 @Collin Jackson answer
之外还添加示例代码
例子
在 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
),
在我的例子中,我想要一个徽标/图像而不是文本居中。在这种情况下,centerTitle
是不够的(不知道为什么,我有一个 svg 文件,也许这就是原因......),例如,这个:
appBar: AppBar(centerTitle: true, title: AppImages.logoSvg)
不会真正居中图像(加上图像可能太大等)。对我有用的是这样的代码:
appBar: AppBar(centerTitle: true,
title: ConstrainedBox(
constraints: BoxConstraints(maxHeight: 35, maxWidth: 200),
child: AppImages.logoSvg)),
这有助于在中心制作 Appbar 标题文本。
您可以选择使用 Style 添加您想要的 Styles 或在不需要时对其进行注释。
appBar: AppBar(
title: const Center(
child: Text(
"App Title",
style: TextStyle( color: Colors.white,fontSize: 20),
),
),
),
在应用显示上:
您可以使用 centerTitle 参数将 appBar 的标题居中。
centerTitle为布尔数据类型,默认值为False。
centerTitle : true
示例:
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('App Title'),
backgroundColor: Colors.red,
centerTitle: true,
),
),
),
);
}
应用栏:应用栏(
中心标题:真实的,
title:Text("你好")
)
appBar有自己的是否显示标题中心的bool条件,
所以,
如果你设置为真,
appBar: AppBar(
title: Text(
"header Text",
style: TextStyle(color: Colors.black),
),
centerTitle: true,
),
然后它将居中,否则它的默认左对齐(在android中)
ios 设置中心(默认)。
我的情况是这段代码有效:-
应用栏:应用栏(
centerTitle: true,
elevation: 2,
title: Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
child: Text(" TINKLE"),
)
],
),
),
),
希望这对您有所帮助。
是的,但在我的例子中,我使用了 centertitle 和轴对齐,然后它使它居中,如果我只使用它的一个,那么它就不会使它居中,这就是我的做法:
import 'package:flutter/material.dart';
import 'package:infintywalls/widgets/widget.dart';
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Row(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
appName(),
],
),
elevation: 0.0,
centerTitle: true,
),
);
}
}
是的,顺便说一句,appName() 是我的自定义小部件,而不是默认的内置小部件。
首页对你有帮助
谢谢
您可以只使用 appBar 部分中的 centerTitle 属性 使您的标题居中
应用栏(
centerTitle: true, // 这就是你所需要的
...
)
我正在尝试将标题文本置于同时具有前导和尾随操作的应用栏中。
@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 个图标之间完美居中。
标题居中是 iOS 上的默认设置。在 Android 上,AppBar
的标题默认为 left-aligned,但您可以通过将 centerTitle: true
作为参数传递给 AppBar
构造函数来覆盖它。
示例:
AppBar(
centerTitle: true, // this is all you need
...
)
如果您想创建自定义应用栏标题,可以使用另一种方法。例如,您想要在应用栏的中心放置一个图像和一个文本,然后添加
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
来居中 children。然后我们添加了两个 children - 一个图标和一个带文本的 Container
。我将 Text
小部件包装在 Container
中以添加必要的填充。
我遇到了同样的问题,当我添加
时终于成功了
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,
],
),
);
}
以下是我在应用栏上制作 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(),
),
)
);
}
使用Center
对象
appBar: AppBar(
title: Center(
child: const Text('Title Centered')
)
)
@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"),
);
}
在尝试了许多解决方案后,这对我有所帮助 centerTitle: true
除了 @Collin Jackson answer
例子
在 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
),
在我的例子中,我想要一个徽标/图像而不是文本居中。在这种情况下,centerTitle
是不够的(不知道为什么,我有一个 svg 文件,也许这就是原因......),例如,这个:
appBar: AppBar(centerTitle: true, title: AppImages.logoSvg)
不会真正居中图像(加上图像可能太大等)。对我有用的是这样的代码:
appBar: AppBar(centerTitle: true,
title: ConstrainedBox(
constraints: BoxConstraints(maxHeight: 35, maxWidth: 200),
child: AppImages.logoSvg)),
这有助于在中心制作 Appbar 标题文本。 您可以选择使用 Style 添加您想要的 Styles 或在不需要时对其进行注释。
appBar: AppBar(
title: const Center(
child: Text(
"App Title",
style: TextStyle( color: Colors.white,fontSize: 20),
),
),
),
在应用显示上:
您可以使用 centerTitle 参数将 appBar 的标题居中。
centerTitle为布尔数据类型,默认值为False。
centerTitle : true
示例:
import 'package:flutter/material.dart';
void main() {
runApp(
MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('App Title'),
backgroundColor: Colors.red,
centerTitle: true,
),
),
),
);
}
应用栏:应用栏( 中心标题:真实的, title:Text("你好") )
appBar有自己的是否显示标题中心的bool条件,
所以, 如果你设置为真,
appBar: AppBar(
title: Text(
"header Text",
style: TextStyle(color: Colors.black),
),
centerTitle: true,
),
然后它将居中,否则它的默认左对齐(在android中) ios 设置中心(默认)。
我的情况是这段代码有效:-
应用栏:应用栏(
centerTitle: true,
elevation: 2,
title: Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
child: Text(" TINKLE"),
)
],
),
),
),
希望这对您有所帮助。
是的,但在我的例子中,我使用了 centertitle 和轴对齐,然后它使它居中,如果我只使用它的一个,那么它就不会使它居中,这就是我的做法:
import 'package:flutter/material.dart';
import 'package:infintywalls/widgets/widget.dart';
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Row(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
appName(),
],
),
elevation: 0.0,
centerTitle: true,
),
);
}
}
是的,顺便说一句,appName() 是我的自定义小部件,而不是默认的内置小部件。
首页对你有帮助 谢谢
您可以只使用 appBar 部分中的 centerTitle 属性 使您的标题居中
应用栏( centerTitle: true, // 这就是你所需要的 ... )