Android JetPack Compose初步1
一、为什么要使用JetPack Compose?
1.Android视图层次结构存在的问题
由于应用的状态会因用户交互等因素而发生变化,因此界面层次结构需要进行更新以显示当前数据。在更新时会改变 widget 的内部状态。手动操纵视图会提高出错的可能性。而且软件维护的复杂性会伴随更新UI组件的状态的增加而增加。
2.JetPack Compose的处理方式
Compose是一个声明性界面框架。声明性界面模型的工作原理是在概念上从头开始重新生成整个屏幕,然后仅执行必要的更改。此方法可避免手动更新有状态视图层次结构的复杂性。大大简化了UI界面的构建和状态的更新。
二、Compose的配置
在顶层项目中的build.gradle中配置如下信息:
buildscript {ext {compose_version = '1.1.1'} } plugins {... id 'org.jetbrains.kotlin.android' version '1.6.10' apply false }在对应的应用模块的build.gradle中配置如下信息:
android {... kotlinOptions {jvmTarget = '1.8'}buildFeatures {compose true}composeOptions {kotlinCompilerExtensionVersion compose_version}}dependencies {...implementation "androidx.compose.ui:ui:$compose_version"implementation "androidx.compose.material:material:$compose_version"implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"debugImplementation "androidx.compose.ui:ui-test-manifest:$compose_version" }
三、可组合函数和可预览函数
1.可组合函数
在函数前增加@Composable注解定义的函数,多个可组合函数嵌套构建成一个界面。
@Composable注解的作用是通知Compose编译器将这个可组合函数及其相关的数据处理为一个界面。
可组合函数没有返回值。
2.可预览函数
可预览函数首先是可组合函数,但是增加了@Preview注解,表明可以在Android Studio的Design视图显示预览函数代码组成的界面。
例如:
@Composable
fun GreetingWithBox(name:String){Box(modifier= Modifier.fillMaxWidth().padding(5.dp)){Text(text= "欢迎 $name !",fontSize = 24.sp, textAlign = TextAlign.Center)}
}
@Preview(showBackground = true)
@Composable
fun DefaultPreview() {GreetingWithBox("Android 世界")
}
四、脚手架Scaffold构建界面
@Composable fun Scaffold(modifier: Modifier = Modifier,scaffoldState: ScaffoldState = rememberScaffoldState(),topBar: @Composable () -> Unit = {},bottomBar: @Composable () -> Unit = {},snackbarHost: @Composable (SnackbarHostState) -> Unit = { SnackbarHost(it) },floatingActionButton: @Composable () -> Unit = {},floatingActionButtonPosition: FabPosition = FabPosition.End,isFloatingActionButtonDocked: Boolean = false,drawerContent: @Composable (ColumnScope.() -> Unit)? = null,drawerGesturesEnabled: Boolean = true,drawerShape: Shape = MaterialTheme.shapes.large,drawerElevation: Dp = DrawerDefaults.Elevation,drawerBackgroundColor: Color = MaterialTheme.colors.surface,drawerContentColor: Color = contentColorFor(drawerBackgroundColor),drawerScrimColor: Color = DrawerDefaults.scrimColor,backgroundColor: Color = MaterialTheme.colors.background,contentColor: Color = contentColorFor(backgroundColor),content: @Composable (PaddingValues) -> Unit ) {... }
五、Modifier修饰符
Modifier修饰符起到组件属性配置的工具。Modifier调用属性配置的函数,仍会返回Modifier对象,因此可以对Modifier对象进行连续调用。
参考文献
Android Compose 教程 | Android 开发者 | Android Developershttps://developer.android.google.cn/jetpack/compose/tutorial?hl=zh-cn
Android JetPack Compose初步1相关推荐
- Android JetPack Compose初步2~实现可滚动列表的功能
Android JetPack Compose的配置参考Android JetPack Compose初步1 在本应用中定义可滚动的列表的界面,类似RecyclerView组件的显示效果. 一.定义实 ...
- Android: Jetpack Compose如何禁用涟漪(水波纹)效果
系列文章目录 Android: Jetpack Compose如何禁用涟漪(水波纹)效果 Android:使用Jetpack Compose 实现Text控件跑马灯效果 Android:使用Jetpa ...
- Android Jetpack Compose
Android Jetpack Compose 一.什么是Jetpack Compose 二.关于Jetpack Compase的介绍 Jetpack Compose的特点 Jetpack Compo ...
- 学不动了,尝试用Android Jetpack Compose重写微信经典飞机大战游戏
前段时间看了TechMerger大佬写的<一气呵成:用Compose完美复刻Flappy Bird!>,甚是有趣,按耐不住那躁动的心,笔者决定跟随大佬的脚步通过写游戏的方式学习Jetpac ...
- (转)Android Jetpack Compose 最全上手指南
在今年的Google/IO大会上,亮相了一个全新的 Android 原生 UI 开发框架-Jetpack Compose, 与苹果的SwiftIUI一样,Jetpack Compose是一个声明式的U ...
- 原创|Android Jetpack Compose 最全上手指南
在今年的Google/IO大会上,亮相了一个全新的 Android 原生 UI 开发框架-Jetpack Compose, 与苹果的SwiftIUI一样,Jetpack Compose是一个声明式的U ...
- Android Jetpack Compose 最全上手指南 | 开发者说·DTalk
本文原作者: 码农西哥,原文发布于微信公众号: Android 技术杂货铺 https://mp.weixin.qq.com/s/7tKv_RamfW0rG8tZHXH_rg 在 2019 年的 G ...
- Android Jetpack Compose 播放器动画
效果: 直接上完整代码 @OptIn(ExperimentalAnimationApi::class) @Composable fun TestBottom(musicViewModel: Music ...
- Android Jetpack Compose——一个简单的微信界面
一个简单的微信界面 简述 效果视频 底部导航栏 导航元素 导航栏 放入插槽 绘制地图 消息列表 效果图 实现 聊天 效果图 实现 气泡背景 联系人界面 效果图 实现 好友详情 效果图 实现 发现 效果 ...
最新文章
- 数据库常考面试知识点
- 如何编写无法维护的代码 让自己稳拿铁饭碗 ;-)
- dotNet Core使用SignalR实现websocket
- 记华为综合面试(IT集成类)
- solidwork 侵权 证据_电子商务法复习题
- Bailian2975 Caesar Cryptogram【密码】
- 魅族路由器极速版刷机_[技术贴]路由器刷pandavan固件教程——以魅族路由器极速版为例...
- linux 浏览器缓存目录在哪里找,火狐浏览器缓存文件在什么位置?缓存文件位置分享...
- 小程序加入人脸识别_微信小程序实现人脸识别
- 只你一招,解决NAS噪音及速度问题!
- 离线百度地图,添加按钮点击切换卫星地图和街道地图(纯JS)
- 关于Git及GitLab的简单易懂的使用方法(将本地仓库的项目提交到master分支或者自定义的分支上)
- C#支付宝支付接口H5版(手机网页支付)
- 软件测试学习心得-6
- linux中bash是什么命令,Bash简介 Bash是如何处理命令的
- 金链盟中国区块链应用大赛正式启动,200万奖金将花落谁家?
- 随机生成学号和成绩并排序
- BZOJ1095: [ZJOI2007]捉迷藏 【树上距离-括号序列+线段树】
- 使用Veritas Volume Replicator(VVR)对Oracle数据库进行容灾
- c51单片机矩阵键盘1602计算器_51单片机矩阵键盘计算器.doc
热门文章
- 赵剑华2008北京奥运会搞笑语录
- 微信小程序开发入门(连载)—— 认识微信小程序
- 快看漫画个性化推荐探索与实践
- 未初始化数组的默认初始值
- 献给和我一样的Java初学者——用UltraEdit代替“笨重”的IDE,实现轻巧编程!
- 用C语言编程画出图形,C语言图形编程(六) -图形程序设计实例:零件图形的绘制...
- 登陆ArcGIS Server Manager页面,点击Manager Service页面报错:工作站服务没有启动
- 保险行业的快速发展,主要运用了哪些人工智能技术?
- 子弹短信 android,子弹短信app下载_子弹短信app下载安卓版-太平洋下载中心
- 韩服服务器稳定吗,韩服体验最糟糕?论中美日韩四个服务器的游戏体验