IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android~Compose系列(一) -> 正文阅读

[移动开发]Android~Compose系列(一)

目标

  • 认识 Compose
  • 学习 Compose 的基本布局
  • Compose 的状态管理

Compose 的 Column、Row、Box 基本布局

这个三种基本布局的示意如图
三种布局示意图

代码示范

Column
@Preview("column")
@Composable
fun ColumnLayout() {
   Column(
       modifier = Modifier
           .background(Color(0xFF063142))
           .padding(16.dp)
           .size(150.dp)
   ) {
       Text(
           text = "", modifier = Modifier
               .fillMaxWidth()
               .height(50.dp)
               .background(Color(0xFFFFFF00))
       )
       Text(
           text = "", modifier = Modifier
               .fillMaxWidth()
               .weight(1f, true)
               .background(Color(0xFF4385F4))
       )
       Text(
           text = "", modifier = Modifier
               .fillMaxWidth()
               .weight(1f, true)
               .background(Color(0xFF3CDB85))
       )
   }
}

注:16.dp是之前布局中的dp,这个的转换必须在有context的内容下才能进行转换为px等

Row
@Preview("row")
@Composable
fun RowLayout() {
    Row(
        modifier = Modifier
            .size(200.dp)
            .background(Color(0xFF063142))
    ) {
        Text(
            text = "", modifier = Modifier
                .fillMaxHeight()
                .width(50.dp)
                .background(Color(0xFFFFFF00))
        )
        Text(
            text = "", modifier = Modifier
                .fillMaxHeight()
                .weight(1f, true)
                .background(Color(0xFF4385F4))
        )
        Text(
            text = "", modifier = Modifier
                .fillMaxHeight()
                .width(50.dp)
                .background(Color(0xFF3CDB85))
        )
    }
}
Box
@Preview("box")
@Composable
fun BoxLayout() {
    Box(modifier = Modifier.size(200.dp)) {
        Text(
            text = "", modifier = Modifier
                .background(Color(0xFF063142))
                .fillMaxSize()
        )
        Column(
            modifier = Modifier.fillMaxSize(),
            verticalArrangement = Arrangement.Center,
            horizontalAlignment = Alignment.CenterHorizontally
        ) {
            Text(
                text = "",
                modifier = Modifier
                    .size(
                        100.dp, 100.dp
                    )
                    .background(Color.Yellow)
            )
        }

    }
}
Modifier 的使用

Compose的一个重要的样式属性:修饰符。类似于Style,常用的属性大小,布局,行为和外观。因为Compose是函数式的编程语言,所以这个属性非常灵活。需要注意的

  • 有序
  • 手势(点击、滚动、拖动,滑动,多点触控,旋转、缩放)

列表

列表我们这边来实现一个简易的需求,一个通讯录的个人信息展示。
通信录

先实现 Item 布局

@Preview
@Composable
fun ContactListItem(
    @PreviewParameter(ContactDefault::class) contact: Contact
) {
    val context = LocalContext.current

    Row(
        modifier = Modifier
            .background(Color(0xFFF6F6F6))
            .padding(10.dp)
            .height(60.dp)
            .fillMaxWidth()
            .background(Color.White, RoundedCornerShape(10.dp))
            .clickable {
                Toast
                    .makeText(context, "contact:${contact.toString()}", Toast.LENGTH_SHORT)
                    .show()
            }
            .padding(6.dp),
        verticalAlignment = Alignment.CenterVertically
    ) {

        Text(
            text = "",
            modifier = Modifier
                .size(40.dp, 40.dp)
                .background(color = contact.userIcon, shape = CircleShape),
        )

        Column(Modifier.padding(10.dp, 0.dp, 0.dp, 0.dp)) {
            Text(text = contact.userName, fontSize = 16.sp)
            Text(text = contact.email, fontSize = 10.sp, color = Color(0x52030303))
        }
    }
}

拼接 Item 成为 List

@Preview
@Composable
fun ContactList() {
    val dataSource = mockData()
    MyComposeTheme() {
        LazyColumn() {
            dataSource.forEach { contact ->
                item {
                    ContactListItem(contact)
                }
            }
        }
    }
}

总结 List 的实现
通过上面两步发现整体的编码过程只考虑了 Item 和 DataSource 进行遍历即可。LazyColumn进行懒加载和复用,很明显比 RecycleView 和 ListView 高效明了,如果需要加载不同的 Item 只需要在遍历进行判断,加载不一样的 Item 即可。需要注意的是@PreviewParameter(ContactDefault::class)对于预览函数的使用,这个主要是结合 AndroidStudio 进行预览的方法,这个方法的接口为PreviewParameterProvider,重写values方法,返回mock的数据。

Compose 的状态管理

在 Android 的以往的 xml 的布局中,ViewModel 是使用 Observable 对数据进行封装,根据 xml 生产监听的代码。在 Compose 中使用 remember {mutableStateOf()}的值,当值变化后,就会执行触发改变。

例子

@Preview("state_manager")
@Composable
fun StateManagerView() {

    var name by rememberSaveable { mutableStateOf("") }

    Column(
        modifier = Modifier
            .fillMaxSize()
            .padding(16.dp)
    ) {
        Text(text = "Hello")
        OutlinedTextField(value = name,
            onValueChange = { name = it },
            label = { Text(text = "name") }
        )
    }
}

Compose 是什么

进过以上的实操和体验后,我们来看看Android Compose的定义和说明:
用于构建原生界面的新款 Android 工具包。它可简化并加快 Android 上的界面开发。使用更少的代码、强大的工具和直观的 Kotlin API,快速让应用生动而精彩。有以下的特点

  • 声明性编程,减少了遍历树,内部管理状态
  • 简单的组合函数
  • 动态内容

上手体验,先跟随文档进行简易的编码,有了整体的认知后,进行小需求去实现,看看自己理解的盲区在哪里,之后去修复。本篇文章转自同事未完成的技术分享。

总结

Compose 和之前的 View 比较

ViewCompose
命令式编程声明式编程
树形结构的遍历查找设置组件内部进行变更
基于View和ViewGroup衍生基于更为底层的Canvas绘制
面向对象的继承组合与函数化
xml相对静态动态组合
支持预览支持丰富的预览,包括点击触摸

学习资料

  1. Jetpack Compose 官方出品,全面详尽
  2. compose-samples 有详尽的代码,方便手动编译和改动
  3. 本文Git源码:https://github.com/Hynsn/SimpleGallery/tree/master/app_kt
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-11 17:38:03  更:2021-10-11 17:38:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:26:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码