当前位置: 首页 > wzjs >正文

网站建设基本目标江岸网站建设

网站建设基本目标,江岸网站建设,兰州网站的建设,wordpress产品展示模板Compose常用UI组件 概述Modifier 修饰符常用Modifier修饰符作用域限定Modifier Modifier 实现原理Modifier.Element链的构建链的解析 常用基础组件常用布局组件列表组件 概述 Compose 预置了很多基础组件,如 Button,TextField,TopAppBar等&a…

Compose常用UI组件

  • 概述
  • Modifier 修饰符
    • 常用Modifier修饰符
      • 作用域限定Modifier
    • Modifier 实现原理
      • Modifier.Element
      • 链的构建
      • 链的解析
  • 常用基础组件
  • 常用布局组件
  • 列表组件

概述

Compose 预置了很多基础组件,如 Button,TextField,TopAppBar等,他们都是基于 Material Design规范设计等。同时也提供了 Column,Row,Box等容器组件,每个基础组件都有一个Modifier修饰符。

Modifier 修饰符

允许我们通过连是调用的写法来为组件应用一系列样式设置,如边距,位移,字体等。

常用Modifier修饰符

  • Modifier.size:组件大小
  • Modifier.background: 为组件添加背景色
  • Modifier.fillMaxSize:让组件高度或者宽度上填满父空间
  • Modifier.border & Modifier.padding:给组件添加边框和间隙
  • Modifier.offset:移动被修饰组件的位置,分别传入垂直或水平方向的偏移量

作用域限定Modifier

Compose 的作用域限定实现了 Modifier 的安全调用,我们只能在特定作用域中调用修饰符
如下方 Box 的定义中,BoxScope即是作用域

@Composable
inline fun Box(modifier: Modifier = Modifier,                   //修饰符contentAlignment: Alignment = Alignment.TopStart,//内容的位置propagateMinConstraints: Boolean = false,       //是否应将传入的最小约束传递给内容content: @Composable BoxScope.() -> Unit    //内容,即界面元素
) {......
}
  1. matchParentSize:BoxScope中使用,保证当前组件的尺寸与父组件相同
  2. weight:在RowScope或ColumnScope中使用,用于设置百分比

Modifier 实现原理

查看源码,Modifier接口有3个直接实现类或接口:伴生对象Modifier、内部子接口Modifier.Element、CombinedModifier。

  • 伴生对象Modifier:最常用的Modifier, 当我们在代码中使用 Modifier.xxx(),实际使用的就是这个伴生对象。
  • 内部子接口 Modifier.Element:当我们使用Modifier.xxx()时,其内部实际会创建一个Modifier实例。
  • CombinedModifier:Compose内部维护的数据结构,用于连接Modifier链中的每个Modifier结点。

Modifier.Element

  • LayoutModifier:与布局相关,但凡涉及大小的,位置都和这个相关。
  • ComposedModifier: 一个私有类,用户无法直接创建。它主要用于组合多个Modifier实例。
  • DrawModifier:来在布局空间中执行绘制操作,过Modifier.drawWithContent函数创建。
  • …,每个Element都有自己专属的作用。

链的构建

当我们通过链式调用Modifier时,其实调用的是then()方法来拼接Modifier

interface Modifier {infix fun then(other: Modifier): Modifier =if (other === Modifier) this else CombinedModifier(this, other)
}class CombinedModifier(private val outer: Modifier,private val inner: Modifier
) : Modifier

Modifier链结构

链的解析

借助 Modifier 接口中 foldIn() 与 foldOut() 用法,
foldIn():正向遍历Modifier链,SizeModifier-> Background -> PaddingModifier -> ComposedModifier
foldOut():反向遍历 Modifier 链, ComposedModifier -> PaddingModifier -> Background ->SizeModifier
遍历形成的链没有 CombinedModifier,因为CombinedModifier重写了foldIn()方法

interface Element : Modifier {...override fun <R> foldIn(initial: R, operation: (R, Element) -> R): R =operation(initial, this)
}class CombinedModifier(private val outer: Modifier,private val inner: Modifier
) : Modifier {...override fun <R> foldIn(initial: R, operation: (R, Modifier.Element) -> R): R =inner.foldIn(outer.foldIn(initial, operation), operation) 
}

我们知道Compose组件都是基于Layout这个基础组件实现的,所以我们来看看我们创建的Modifier在其中是如何进行传递的。可以发现我们的modifier传入了一个名为materializerOf方法。

@Composable inline fun Layout(content: @Composable () -> Unit,modifier: Modifier = Modifier,measurePolicy: MeasurePolicy
) {...ReusableComposeNode<ComposeUiNode, Applier<Any>>(factory = ...,update = {...},skippableUpdate = materializerOf(modifier), // 重点content = ...)
}

走进Composer.materialize()。可以发现源码中使用了fouldIn()方法,进行了递归处理,完全摊开的Modifier链。

fun Composer.materialize(modifier: Modifier): Modifier {...val result = modifier.foldIn<Modifier>(Modifier) { acc, element ->acc.then(if (element is ComposedModifier) {@kotlin.Suppress("UNCHECKED_CAST")val factory = element.factory as Modifier.(Composer, Int) -> Modifierval composedMod = factory(Modifier, this, 0) // 生产 Modifiermaterialize(composedMod) // 生成出的 Modifier 可能也包含 ComposedModifier,递归处理} else element)}...return result
}

常用基础组件

  • Text:用于显示文本内容。
  • Image:用于显示图片。
  • Button:用于创建按钮。
  • TextField:用于接收用户输入的文本。
  • Divider:用于在 UI 中添加分隔线。

常用布局组件

  • Column:用于垂直排列多个组件。
  • Row:用于水平排列多个组件。
  • Box:用于在屏幕上创建一个矩形的区域。
  • Surface:用于绘制一块可交互的区域。
  • Card:用于显示一个卡片式的 UI 元素。
  • Spacer:留白组件。
  • ConstraintLayout:约束布局。
  • Scaffold 脚手架。

列表组件

  • LazyComposables:包含 LazyColumn 和 LazyRow, 用于垂直 和 水平显示 滚动的列表。
  • LazyListScope作用域:包含 item,item(Int) 和 items(List)以及 itemsIndexed(List),用于构建LazyComposables的列表内容。

参考资料:图解Compose Modifier实现原理 ,竟然如此简单!


文章转载自:

http://xdddI0r1.xpzrx.cn
http://Kcym7Tym.xpzrx.cn
http://eWo7trIR.xpzrx.cn
http://YZl6PAsd.xpzrx.cn
http://faLpWS3c.xpzrx.cn
http://uavTk0Bd.xpzrx.cn
http://mu1nsknG.xpzrx.cn
http://SgX9vyPp.xpzrx.cn
http://qil9k5SK.xpzrx.cn
http://cFjmm29x.xpzrx.cn
http://0TBI4tmW.xpzrx.cn
http://53s3bpqx.xpzrx.cn
http://iTl2ToNs.xpzrx.cn
http://tLFotNCK.xpzrx.cn
http://l1hqLjuQ.xpzrx.cn
http://9xpeM7lU.xpzrx.cn
http://gcxzVHfJ.xpzrx.cn
http://F4HahMtn.xpzrx.cn
http://fJryeST2.xpzrx.cn
http://h3AK8EsU.xpzrx.cn
http://oYNnHE1x.xpzrx.cn
http://q7NanAka.xpzrx.cn
http://qPtlp3Uc.xpzrx.cn
http://fOcthZKo.xpzrx.cn
http://FkV4mDqw.xpzrx.cn
http://Ltzdta9Q.xpzrx.cn
http://IKoWVQtb.xpzrx.cn
http://TciOqkqo.xpzrx.cn
http://Q3QPNHZ5.xpzrx.cn
http://11iOCOyh.xpzrx.cn
http://www.dtcms.com/wzjs/702588.html

相关文章:

  • 帮企业做网站的公司注销主体备案与网站备案表
  • 上海 做网站微信小程序制作教程视频
  • 沈阳网站开发怎么推广产品
  • 泰州企业网站建设公司水果电商网站建设相关文献
  • 网站开发的风险与风险管理徐州市建设监理协会网站
  • php网站开发软件编程曹鹏wordpress视频教程
  • 云计算 网站建设seo排名优化培训怎样
  • 做防水广告在哪个网站最好中企动力做的网站被镜像
  • 济南制作网站的公司东莞易进网络专业网站建设 网站
  • WordPress文章数据转emlog苏州seo关键词优化价格
  • 兼职网站推广如何做建设网站要先给钱才能做
  • 外贸企业网站模板建站工具 ip
  • 百度快照优化网站百度云网站建设视频
  • 盘县 网站建设免费网站注册免费创建网站
  • 版面布局网站的域名和所采用的版面布局形式php做企业网站
  • 沈阳网站建设费用推广哪个app最挣钱
  • 网站服务器租用织梦电影网站模板
  • 关键词查询网站设计一套vi的报价
  • 怎样做钓鱼网站云南建设网
  • 怎样建设好网站wordpress 菜单路径
  • 怎样监测熊掌号绑定成功网站一个平台网站开发
  • 网站文字排版公司免费建网站
  • 怎么用ftpxp做网站成都互联网公司排名
  • 西部网站管理助手wordpress网站响应速度插件
  • 手机端网站开发什么视频网站可以做链接地址
  • 济南建手机网站公司搜索排名优化策划
  • 广告联盟的网站怎么做网站后台免费模板
  • 网站建设和维护一年的费用正常做一个网站多少钱
  • 论述网站建设的主要步骤电脑零基础培训班
  • 微信公众号托管代运营重庆seo网络推广