搭设基本 Scaffold 页面

scaffold 组件遵循 Material Design,可以协助开发者迅速构建对应框架页面

准备工作

首先在 drawable 文件夹内,添加几张 vector images,用作我们的底部导航栏图标

在主页面中声明数据类,表示单个图标以及其解释文本

data class Item(val name: String,val icon: Int
)

新增组件 mainBody,逐一添加三个底部按钮的图标

@Composable
fun mainBody() {// 存储当前选中的底部按钮的状态var selectedItem by remember {mutableStateOf(0)}// 三个底部按钮val items = listOf(Item("主页", R.drawable.home),Item("列表", R.drawable.list),Item("设置", R.drawable.setting))...
}

主体编写

首先是设置 topBar,即顶部导航栏对应按钮

代码很简单,但要注意使用的括号类型以及对应嵌套关系!

Scaffold(topBar = {TopAppBar(title = { Text("主页") },navigationIcon = {IconButton(onClick = { /*TODO*/ }) {Icon(Icons.Filled.Menu, null)}})},...
){}

紧接着在 topBar 属性后面写底部导航栏属性 bottomBar

items.forEachIndexed 按照索引渲染,vue 的 v-for 懂吧,就这个原理!
依次渲染 BottomNavigationItem 即可;

bottomBar = {BottomNavigation {items.forEachIndexed { index, item ->BottomNavigationItem(// selectedItem 是内置属性,表示当前选中的Item// onClick即切换当前激活的Itemselected = selectedItem == index,onClick = { selectedItem = index },// 这几个属性看看英文就懂了,不解释icon = { Icon(painterResource(item.icon), null) },alwaysShowLabel = false,label = { Text(item.name) })}}
}

这是总体的代码:

@Composable
fun mainBody() {var selectedItem by remember {mutableStateOf(0)}val items = listOf(Item("主页", R.drawable.home),Item("列表", R.drawable.list),Item("设置", R.drawable.setting))Scaffold(topBar = {TopAppBar(title = { Text("主页") },navigationIcon = {IconButton(onClick = { /*TODO*/ }) {Icon(Icons.Filled.Menu, null)}})},bottomBar = {BottomNavigation {items.forEachIndexed { index, item ->BottomNavigationItem(selected = selectedItem == index,onClick = { selectedItem = index },icon = { Icon(painterResource(item.icon), null) },alwaysShowLabel = false,label = { Text(item.name) })}}}) {// 在scaffold里面塞一个box,糊弄一下Box(modifier = Modifier.fillMaxSize(),contentAlignment = Alignment.Center) {Text(text = "主页界面")}}
}

JetpackCompose - Scaffold布局简要入门相关推荐

  1. Flutter中Scaffold布局的使用详解及实例代码

    Flutter中Scaffold布局的使用详解及实例代码 Scaffold实现了基本的Material布局.只要是在Material中定义了的单个界面显示的布局控件元素,都可以使用Scaffold来绘 ...

  2. 彻底弄懂CSS盒子模式一(DIV布局快速入门)

    ­彻底弄懂CSS盒子模式一(DIV布局快速入门) ­ ­作者:唐国辉 ­ ­实例网页网址:http://www.blueidea.com/articleimg/2007/03/4545/css2.ht ...

  3. 分布式的,新一代版本控制系统Mercurial的介绍及简要入门

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 分布式的 ...

  4. Grid布局基础入门

    Grid布局基础入门 一.容器属性 1.display属性 (1)display:gird :容器元素是块级元素 (2)display:inline-grid :容器元素是内联元素 2.grid-te ...

  5. 解决Flutter键盘弹起导致与输入框有间距问题(Flutter键盘弹起Scaffold布局流程)解析

    一. 在项目中遇到了个如下问题: 当页面底部有个输入框,点击弹出键盘时:输入框与键盘之间有一段间距 通过排除,最后找到了问题根源所在:原因是使用了这个屏幕适配框架导致的.此框架通过直接修改Flutte ...

  6. html+css+布局从入门到精通,CSS+DIV网页样式布局实战从入门到精通 中文pdf扫描版[48MB]...

    CSS+DIV网页样式布局实战从入门到精通通过精选案例引导读者深入学习,系统地介绍了利用CSS和DIV进行网页样式布局的相关知识和操作方法. 全书共21章.第1-5章主要介绍网页样式布局的基础知识,包 ...

  7. css盒子教程,彻底弄懂css盒子模式(div布局快速入门)_css教程

    实现结构与表现分离 在真正开始布局实践之前,再来认识一件事--结构和表现相分离,这也用CSS布局的特色所在,结构与表现分离后,代码才简洁,更新才方便,这不正是我们学习CSS的目的所在吗?举个例来说P是 ...

  8. 网站开发之DIV+CSS简单布局网站入门篇(五)

    这篇文章主要介绍如何使用DIV和CSS简单布局一个网站的首页,通常将网站划分为顶部(Logo.导航条).中部(页面主要内容.左右栏目).底部(制作方介绍.超链接).这是非常基础的一篇引入性文章,采用案 ...

  9. import java.awt.BorderLayout;_Swing-布局管理器之BorderLayout(边界布局)-入门

    边界布局管理器(BorderLayout)把容器的的布局分为五个位置:CENTER.EAST.WEST.NORTH.SOUTH.依次对应为:上北(NORTH).下南(SOUTH).左西(WEST).右 ...

最新文章

  1. PAT甲级1083 List Grades:[C++题解]结构体、排序
  2. Linux下C++访问MySQL数据库
  3. rust游戏解封了吗_柚子君宾馆爬墙听隔壁声,潇天傲解封不罢休!继续专场嘲讽散打哥...
  4. 列表视图案例1——阅读古诗
  5. 【webpack系列】从零搭建 webpack4+react 脚手架(四)
  6. Django中的ORM进阶操作
  7. [渝粤教育] 广东-国家-开放大学 21秋期末考试大学英语210262k2
  8. 【深拷贝VS浅拷贝】------【巷子】
  9. 易点汽车租赁服务器无响应,全部服务器无响应!!!
  10. vb.net 教程 2-13 Windows API 函数
  11. ECshop新手入门模板制作教程[转载]
  12. 传说中的蝴蝶效应?--MAC地址克隆竟然惹祸了!
  13. Android 解决帧动画卡顿问题
  14. Vue实现web端仿网易云音乐 完成大部分功能
  15. animate将flash转换html,【An教程】快速入门Animate(原Adobe Flash)
  16. reduceByKeyAndWindow基于滑动窗口的热点搜索词实时统计(Scala版本)
  17. TextView(文本框)
  18. 执行力七准则---工作中如何破解困难提高执行力
  19. C语言 | 将密码译回原文,并输出密码和原文
  20. C/C++使用Windows的API实现共享内存以及同步

热门文章

  1. 剑指offer|40题题解汇总成pdf了
  2. 网络状态诊断工具——netstat命令
  3. Mopria联盟发布采用通用标准的Mopria Scan应用
  4. 数据结构 C语言实现冒泡排序
  5. 天正建筑T20 V6.0 安装蓝屏解决方案
  6. 软考初级程序员上午单选题(20)
  7. 西门子6ES70变频器速度控制的参数设置
  8. 嵌入式Linux应用程序开发-(1)第一个嵌入式QT应用程序
  9. mysql 的alter table操作
  10. socks5 代理服务器项目