Compose框架基础

221 阅读3分钟

什么是Compose?

  • Jetpack Compose 是用于构建原生Android界面的新工具包
  • Compose也不是View和ViewGroup,而是重新写了一套全新的渲染、布局和触摸机制。----Flutter

Flutter?

flutter跨平台,跨平台还很流畅,没有使用原生的控件,而是从底层,更下层的api,在Android直接用canvers直接绘制出来,独立做了一套渲染的逻辑,老版的跨平台,用原生的控件做拼装,渲染要经过一层转换,影响效率。

image.png

image.png Compose是UI库,用kotlin编写,首字母用大写字母,可以有更好的辨识度。

  • Compose对加了Composable注解的函数做出不一样的编译逻辑,让这些函数在App运行的时候变成我们的界面,让它们正确的显示,干预编译过程。

干预编译过程

  • 注解处理器
  • Compose直接使用编译器插件干预编译,编译器插件就是对编译器多个小修改,做个外挂,

注解处理器和编译器插件区别?

  • 注解处理器是修改kotlin代码,修改完之后再统一编译,不干预编译过程,干预编译前。
  • 编译器插件直接修改字节码的输出逻辑。

Compose和协程的suspend关键字很像

-都是干预编译过程,调用方式也很像,机制也差不多一样。

机制也差不多一样Compose为什么不用关键字呢

关键字是语言层面通用的东西,Compose不是语言层面的东西,是UI库

Compose好在哪?

    • 声明式的UI,传统的是命令式UI(就像java、kotlin来手动更新界面,命令界面改怎么更新) image.png

什么是声明式UI?

  • 只需要把界面给声明出来,而不需要手动更新 text值改变后,Text会自动变化,不需要重新设置。
  • 是一种框架特性,和语言与写法都无关。
  • 好在哪?省事,省很多事!(本来是由我们做,现在由框架做)就像Data Binging
那我为什么不干脆用DataBinding?

DataBinding框架或者模式都不能做到声明式UI,Compose比DataBinding更强!

  • 没有功能限制
    • 去掉了xml
  • 传统写法:xml + java(kotlin) 两种语言的交互和牵扯----局限性
  • Compose只能用kotlin,避免了交互和牵扯
  • 为什么不用纯java/kotlin写ui?太费劲
  • 所以,去掉xml也算好处。
    • 独立于操作系统
    • 方便调试

结构

创建项目会自动创建主题文件

image.png

  • Color是颜色
  • shape是形状
  • Theme是主题
  • type是字体

Compose所解决的问题

  • 在编写可维护的软件时,我们的目标是最大程度的减少耦合增加内聚
  • 尽可能的将相关代码组织在一起,以便我们可以轻松的维护他们,并方便我们随着应用的增长而扩展我们的代码,这个称之为关注分离点。

image.png