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 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Jetpack compose比xml优秀的地方 -> 正文阅读

[移动开发]Jetpack compose比xml优秀的地方

作者:wuzhuoyu
转载地址:https://juejin.cn/post/7109867329365737509

compose 比xml优秀的地方

Jetpack Compose 是来自 Google 的现代 UI 工具。它的第一个稳定版本是在 2021 年 7 月,到目前为止,许多 Kotlin 开发人员都喜欢这种在 Android 中设计 UI 的新方式。让我们看一下 Jetpack Compose 的一些出色示例,以及它与传统 XML 的区别。

声明式界面

在compos问世之前我们一直采用的都是命令式的UI,第一步就是先通过findViewById获取元素才能获取内容,再者才是修改元素,虽然有ViewBinding和DataBinding两个方式来方便命令UI,但是所需要的配置都是比较复杂的,使用也得额外仔细。

声明式的UI是描述屏幕状态的,是一种预先定义的方式,并且UI元素在监听到状态发生时而改变,比如按钮计数器就的实现。

class ComposeActivity: ComponentActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContent {
      Box (modifier = Modifier.fillMaxSize().background(Color.White)) {
        CountScreen()
      }
    }
  }
  
  @Composable
  fun CountScreen() {
    var count by remember { mutableStateOf(0) }
Column(
      horizontalAlignment = Alignment.Center,
      verticalArrangment = Arrangement.Center
    ) {
      Text(text = count.toString())
      Spacer(modifier = Modifier.height(16.dp))
      Button(onClick = { count++ }) {
        Text(text = "点击+1")
      }
    }
  }
}

列表展示便捷

以往我们在展示列表的时候往往会用上recyclerview,但是我们都知道这样会产生很多模板代码,当你使用compose的话就可以消除这些模板代码。

class ComposeActivity : ComponentActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContent {
      val lists = listOf(
        ListEntity("一", "第一条数据"),
        ListEntity("二", "第二条数据"),
        ListEntity("三", "第三条数据"),
      )
LazyColumn(modifier = Modifier.fillMaxSize().background(Color.White)) {
        items(lists) { entity -> 
          ListRow(entity)
        }
      }
    }
  }
  @Composable
  fun MessageRow(listEntity: ListEntity) {
    Column(modifier = Modifier
                        .fillMaxWidth()
                        .border(1.dp, Color.Black)
                        .padding(8.dp)
    ) {
      Text(text = listEntity.id)
      Text(text = listEntity.dec)
    }
  }
}

LazyColumn 是垂直 RecyclerView 的替代品。仅当可组合项出现在屏幕上时,屏幕才会呈现。由于 Compose 是一个声明式 UI 框架,因此可组合项将在状态更改时重新绘制。

导航的便捷

对于xml的导航,最初的做法是需要有对于的activity或者fragment来一起配合;尽管还有jetpack的导航库作为支撑,但是由于配置繁琐的问题还是依旧比较难用。当你使用compose的话就可以很友好的处理这类问题。

class ComposeActivity : ComponentActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContent {
      val navController = rememberNavController()
      NavHost(startDestination = "home") {
        composable("home") {
          Home(navController)
        }
        composable("personal") {
          Personal(navController)
        }
      }
    }
  }

  @Composable
  fun Home(navController: NavController) { //UI具体实现 }

  @Composable
  fun Personal(navController: NavController) { //UI具体实现  }
}

动画

不得不说compose对于动画的支撑是非常到位的,传统的xml如果需要完成一个动画功能,需要配置大量的内容,所以xml在完成复杂动画的展示上向来都是力不从心。而compose的动画都是通过api的调用,我们可以简单的自由配置相关动画属性。

var visible by remember { mutableStateOf(true) }
AnimatedVisibility (visible) { 
	AnimatedView()
}

总结

compose的引进这并不是以为着xml就是被弃用了,但是compos绝对是应用层开发的趋势,谷歌花了三年时间正式宣布 Kotlin 为他们的语言,并推出了一个可以在 Kotlin 中运行的 UI 工具包。同样,在几年内,Compose 将成为处理 UI 的首选方式,而 Google 将创建新组件,只有使用 Jetpack Compose 才能呈现这些组件。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 19:00:48  更:2022-07-20 19:00:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/31 5:41:15-

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