Android Jetpack Compose之使用脚手架快速搭建APP布局结构

news/2025/1/12 1:10:56/

概述

现在市场上大多数的手机APP的通用布局结构都是顶部有个顶部导航栏,底部有个底部导航栏,例如抖音的布局结构:
在这里插入图片描述
点击导航栏里面的各个项又可以跳转到相应的页面,现在这种结构特别流行,如果我们使用传统的View来实现会很费力。而且效果还不咋理想。所以Compose 给我们提供了一个组件叫脚手架(Scaffold)可以快速的实现一个类似的UI结构。

实例解析

Scaffold 组件实现了Material Design的布局结构,通过配合其他Material组件就可以轻松实现Matterial Design风格的界面,下面是实现一个包括首页布局,底部导航和侧边栏的简单例子,代码如下:

@Composable
fun ScaffoldDemo() {var selectedItem by remember {mutableStateOf(0)}val items = listOf(Item("主页", R.drawable.home_page),Item("列表", R.drawable.list_page),Item("设置", R.drawable.setting_page))val scaffoldState = rememberScaffoldState()val scope = rememberCoroutineScope()Scaffold(drawerContent = {Text(text = "我是侧边栏")},scaffoldState = scaffoldState,topBar = {TopAppBar(title = {Text(text = "主页")},navigationIcon = {IconButton(onClick = { /*TODO*/ }) {Icon(imageVector = Icons.Filled.Menu,contentDescription = null);}})}, bottomBar = {BottomNavigation {items.forEachIndexed { index, item ->BottomNavigationItem(selected = selectedItem == index,onClick = { selectedItem = index },icon = {Icon(painterResource(id = item.icon), null)},alwaysShowLabel = false,label = {Text(text = item.name)})}}}) {Box(modifier = Modifier.fillMaxSize(),contentAlignment = Alignment.Center) {Text(text = "主页界面")}BackHandler(enabled = scaffoldState.drawerState.isOpen) {scope.launch {scaffoldState.drawerState.close()}}}
}data class Item(val name: String,val icon: Int
)

然后我们将其运行起来,在我们的Activity中调用
ScaffoldDemo()函数就可以了。

class MainActivity : ComponentActivity() {@SuppressLint("SetJavaScriptEnabled")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {ScaffoldDemo()}}
}

运行效果:

在这里插入图片描述在这里插入图片描述

从上面的代码中可以看到,Scaffold会自动处理好各自的位置BottomNavigation组件创造了底部导航栏的总体布局,比如高度等,这些都是按照Material Design风格设计的,如果要修改整体的颜色,可以在BottomNavigation的其他参数上修改。

BottomNavigationItem组件则创建了具体的导航图标及标签,在BottomNavigationItem组件中可以设置一些其他参数,例如选中或者是未选中时图标的颜色。在上述例子中,我们设置了alwaysShowLabel = false。即只有是选中当前页面时,才会展示标签的文字。

在上面的例子中我们还添加了一个侧边栏,通过Scaffold添加侧边栏非常简单,Scaffold有一个drawerContent参数,只需要传入一个自定义的Composablecontent即可。侧边栏做好了后,我们还需要处理下按键事件,因为如果我们不做处理的情况下,按下系统的返回键,应用会直接退出,而此时我们希望是关闭侧边栏。所以Compose提供了用于拦截系统返回键的组件BackHandler。此外,我们通过ScaffoldState可以监听侧边栏是否打开。具体的逻辑为:我们通过rememberScaffoldState()获取到包含侧边栏状态的ScaffoldState,当侧边栏被打开时,scaffoldState.drawerState.isOpen被更新为true,此时,BackHandler开始监听系统返回键事件,返回键事件被按下时会通过scaffoldState来关闭侧边栏。

总结

本文主要是简单介绍了Compose的Scaffold 脚手架的使用,使用脚手架可以极大的节约我们开发的时间,让我们快速的搭建一个app的界面结构,并且代码也比使用传统view少了很多,而且添加侧边栏还非常简便,非常适合快速实现需求。建议读者可以去研究下Scaffold的实现,我相信会对我们的开发有很大的帮助。


http://www.ppmy.cn/news/644506.html

相关文章

地板选购指南

>>经销商所谓“B级板” 正规来说,国家标准是不存在B级板这回事的,因为国家的质量标准都是用特级、一级之类的名称。话说回来,经销商所谓的B级板,就是色泽较差的板,但一般来说,质量上不会存在很大的差…

开发 react 应用最好用的脚手架 create-react-app

1. 介绍 在开发react应用时,应该没有人用传统的方法引入react的源文件(js),然后在html编辑吧。 大家都是用webpack es6来结合react开发前端应用。 这个时候,我们可以手动使用npm来安装各种插件,来从头到尾自己搭建环境。 比如…

铺地板问题

有一长度为 N(1<&#xff2e;<10)的地板&#xff0c;给定两种不同瓷砖&#xff1a;一种长度为 1&#xff0c;另一种长度为 2&#xff0c;数目不限。要将这个长度为 N 的地板铺满&#xff0c;一共有多少种不同的铺法&#xff1f;例如&#xff0c;长度为 4 的地面一共有如下…

PCB材料简单介绍

1.铜箔 在电路板中&#xff0c;铜是最主要的导电材料&#xff0c;电路板上的信号基本都是由铜箔蚀刻而成的。 铜厚是工程师在做叠层设计时需要考虑的设计指标参数&#xff0c;对于高速电路设计&#xff0c;随着频率的提高&#xff0c;还需要考虑信号传输的趋肤效应影响&#xf…

塑木地板相对比引用

上一篇我们说了塑木地板&#xff0c; 宜家鲁恩149元的塑木地板&#xff0c; 要比国产的用料做工好一些。 下面说说实木地板&#xff0c; 这里可就不推荐宜家的了。 很多人都不知道&#xff0c;防腐木阳台户外地板竟有这么多购物玄学&#xff01; ▲户外实木地板的工艺分为三种&…

c语言铺地板,【北理乐学】铺地板

【题目描述】 有一名室内装潢工程队的配料员。他的伙伴们喜欢采用“之”字型的方式铺大理石地砖,图案例如下: 1 2 6 7 15 3 5 8 14 16 4 9 13 17 22 10 12 18 21 23 11 19 20 24 25 如何用C 语言生成这样的图形…

什么是“悬浮地板”?悬浮地板的制作过程和方法,悬浮地板的优势有哪些

悬浮地板厂家&#xff08;阿里巴巴认证厂家&#xff09;https://detail.1688.com/offer/557142135595.html 什么是“悬浮地板”&#xff1f; 悬浮式拼装dao地板被称为第du四代运动地面材zhi料&#xff0c;兴起于美国&#xff0c;风靡于欧洲&#xff0c;dao有将近50年的历史。…

如何选购实木地板?

一、 看地板的含水率。含水率一般在14%以下才算是合格产品二、 看地板的加工精度。用两块地板拼在一起看接缝松紧,接口太松可能会有响声。三、 看地板的漆面光洁程度四、 打开包装验收时看所订的板与交货时的规格、颜色、木种是否一致。五、 看送货的地板有没有…