基本的Material Design布局结构
Flutter应用的用户界面是由布局控件(不可见的)和展示控件(可见的)协同完成的,布局控件就像是建筑里的框架,而展示控件则相当于建筑里的砖瓦。展示控件按照布局控件的要求依次排列,就组成了用户所看见的界面。在Flutter应用中,最基础的布局结构是脚手架(Scaffold
),例如:
import 'package:flutter/material.dart';
void main(){runApp(new MaterialApp(title: 'Flutter应用',home: new Scaffold(),),);
}
脚手架是一个布局控件,它实现了基本的Material Design视觉布局结构。布局控件是不可见的,因此当你执行了上面代码,屏幕显示的是一片空白。现在这个脚手架正等你添砖加瓦,如下图所示:
从上图来看,脚手架里能添加的东西还是比较多的,您可以先从最常用的应用栏(AppBar
)开始入手,应用栏也叫主工具栏,位于脚手架的顶部。
在应用栏中,您能添加以下内容:
属性 | 添加控件 | 描述 |
---|---|---|
title |
文本(Text )
|
应用栏显示的主要控件,描述应用程序当前内容的简短文本 |
leading | 不用添加控件 |
在title 之前显示的控件,如果应用栏位于具有侧导航(Drawer )的脚手架中,则脚手架将使用打开侧导航的图标按钮(IconButton )填充该属性。如果没有侧导航并且可以返回上一个屏幕,则应用栏将使用一个调用Navigator.maybePop 方法的返回按钮(BackButton )
|
actions |
图标按钮、弹出菜单按钮(PopupMenuButton )
|
在title 之后显示的控件,这里主要放一些常用功能的按钮
|
flexibleSpace |
活动空间栏(FlexibleSpaceBar )、图片(Image )等控件
|
在应用栏后面显示的控件,它的高度与应用栏的整体高度相同 |
bottom |
标签栏(TabBar )
|
在应用栏底部显示的控件 |
应用栏需要放在脚手架的appBar
属性中,该属性将应用栏作为固定高度的控件放置在屏幕的顶部(如果需要可滚动的应用栏,可以使用SliverAppBar
)。一个应用栏通常由一个文本和多个常用功能的图标按钮组成,例如:
import 'package:flutter/material.dart';
void main(){runApp(new MaterialApp(title: 'Flutter应用',home: new Scaffold(appBar: new AppBar(title: new Text('Flutter应用'),actions: <Widget>[new IconButton(icon: new Icon(Icons.grade),onPressed: (){ print('收藏'); },),new IconButton(icon: new Icon(Icons.share),onPressed: (){ print('分享'); },),],),),),);
}
执行上面的代码,将构建以下屏幕截图的布局:
接下来再看脚手架的内容区域,这是脚手架的主要内容,显示在应用栏下方,位于浮动功能按钮(FloatingActionButton
)和侧导航后面。内容区域的控件需要放在脚手架的body
属性中,该属性中的控件位于应用栏和脚手架底部之间的可用空间的左上角。想要在可用空间的中心显示这个控件,可以把它放在一个居中控件(Center
)中。想要扩展这个控件,可以把它放在SizedBox.expand
中。
当您想展示的内容超出了屏幕时,有一部分控件可能会溢出(应用不会奔溃,但溢出的边沿会显示成红色),在这种情况下你需要使用列表视图控件(ListView
)作为脚手架的body
属性控件。
import 'package:flutter/material.dart';
void main(){runApp(new MaterialApp(title: 'Flutter应用',home: new Scaffold(appBar: new AppBar(title: new Text('Flutter应用'),actions: <Widget>[new IconButton(icon: new Icon(Icons.grade),onPressed: (){ print('收藏'); },),new IconButton(icon: new Icon(Icons.share),onPressed: (){ print('分享'); },),],),body: new Center(child: new SizedBox(width: 200.0,height: 300.0,child: new Card(child: new Center(child: new Text('你好,世界!'),),),),),),),);
}
执行上面的代码,将构建以下屏幕截图的布局:
在默认情况下,脚手架的resizeToAvoidBottomPadding
属性值为true
,该属性设置是否自动调整body
属性控件的大小,以避免脚手架底部被覆盖。例如,如果在脚手架上方显示屏幕键盘,则可调整body
属性控件的大小以避免被键盘覆盖。如果你不需要此功能,可以将resizeToAvoidBottomPadding
属性设置为false
。更多关于脚手架的细节,请访问Flutter API文档。
基本的Material Design布局结构相关推荐
- 开启Fluter基础之旅二-------Future再论、常用组件、Material Design风格组件学习
Future再论: 这里在继续往下学习之前,先来看一下Dart语言关于Event-Queue和Microtask Queue需要注意的一个小点,这个在之前https://www.cnblogs.com ...
- Flutter 入门学习(五)— Material Design风格组件
文章目录 1. 概述 2. App结构和导航组件 2.1 MaterialApp(应用组件) 2.1.1 设置主页 2.1.2 路由处理 2.1.3 自定义主题 2.2 Scaffold(脚手架组件) ...
- html卡片布局按钮,Material Design风格动态网格卡片布局UI设计
这是一款效果非常炫酷的Material Design风格动态网格卡片布局UI设计效果.在该效果中鼠标滑过卡片时会有阴影效果,当浏览器尺寸改变时,卡片大小会随着改变,整个网格布局有动态变化效果. 使用方 ...
- 说说 Android 的 Material Design 设计(四)——卡片式布局
我们使用 CardView 与 RecyclerView 来·实现一个各种猫的卡片式展示列表吧O(∩_∩)O~ 1 CardView 控件 1.1 引入依赖库 打开 app/build.gradle, ...
- android 布局收缩成球,Android使用Material Design实现悬浮按钮
前言 本文是对<Android第一行代码>第十二章<最佳UI体验--Material Design实战>中关于悬浮按钮实现的学习和记录,主要内容包括-- FloatingA ...
- android抽屉风格,Android开发实战之拥有Material Design风格的抽屉式布局
在实现开发要求中,有需要会使用抽屉式布局,类似于QQ5.0的侧滑菜单,实现的方式有很多种,可以自定义控件,也可以使用第三方开源库. 同样的谷歌也推出了自己的侧滑组件--DrawLayout,使用方式也 ...
- Material Design【Android-Toolbar,滑动菜单,悬浮按钮,卡片布局,下拉刷新和可折叠式标题栏及案例】
文章目录 Material Design--界面设计 1.Toolbar,标题栏 2.滑动菜单 3.悬浮按钮和可交互提示 4.卡片布局 5.下拉刷新 6.可折叠式标题栏 Material Design ...
- 开启Fluter基础之旅三-------Material Design风格组件、Cupertino风格组件、Flutter页面布局篇...
Material Design风格组件: 继续接着上一次https://www.cnblogs.com/webor2006/p/12545701.html的Material Design进行学习. A ...
- Android 学习之《第一行代码》第二版 笔记(二十三)Material Design 实战 —— 卡片式布局
实现基础: Android 学习之<第一行代码>第二版 笔记(二十二)Material Design 实战 -- 悬浮按钮和可交互提示 卡片式布局 卡片式布局是 Materials Des ...
最新文章
- Openstack_通用模块_Oslo_vmware 创建 vCenter 虚拟机快照
- Daily Report 2012.11.9 刘宇翔
- [vue] 你期待vue3.0有什么功能或者改进的地方?
- 常用系统级加压工具简介
- Go语言游戏服务器思维导图
- java三国群雄_三国群英-真三国无双
- java mysql orm框架_JAVA-ORM框架整理➣Mybatis操作MySQL
- 【Git教程】入门安装客户端与服务器
- matlab2016b慢,Matlab 2016a/b中调用GPU速度巨慢的解决办法
- java 记牌_JAVA入门之简易扑克牌游戏
- 趣店PHP面经_腾讯助理PHP开发工程师外包岗面经
- 127.0.0.1 拒绝了我们的连接请求(解析格式数据)
- 这家SaaS公司估值50亿美元,竟然没有一个销售人员
- 免ROOT卸载手机自带软件详细教程
- java分发器 及(注解 + 反射机制)—————— 开开开山怪
- CRM IFD部署更换证书 - adfs证书更换
- error: fatal error: no input files
- 照片损坏只显示一半怎么修复?
- AST抽象语法树的基本思想
- 《HTML入门笔记--HTML常用标签》
热门文章
- algorithm头文件下函数整合
- 模拟按键——在Python使用pynput库
- Python接通图灵机器人
- 【Qt教程】1.10 - Qt5模态与非模态对话框( QDialog)
- Python:列表list对应项求和
- 深度剖析Java数据结构之迭代器(Iterator)
- ubuntu系统部署python3.6.4
- python规范模块和包
- 【转-Andrew_qian】stm32中断嵌套全攻略
- [bzoj1552][Cerc2007]robotic sort[bzoj3506][Cqoi2014]排序机械臂