
Compose
文章平均质量分 86
个人学习笔记总结
Jomurphys
这个作者很懒,什么都没留下…
展开
-
Compose 适配 - 响应式排版 & 自适应布局
基于可用空间而非设备类型来设计自适应布局,实现设备无关性和动态适配性,避免硬编码,以不同形态布局更好的展示内容。原创 2025-04-11 23:34:14 · 427 阅读 · 0 评论 -
Compose - 权限申请
不同版本中,权限状态(如PermissionState)中获取属性的方法不同,例如在“0.23.1”中,通过 PermissionState.hasPermission 属性拿到是否通过的 Boolean 值,在“0.35.0-alpha”中,通过 PermissionState.status.isGranted 属性拿到。原创 2024-06-18 17:37:04 · 1444 阅读 · 0 评论 -
Compose 可组合项 - 日期选择 DatePicker、DatePickerDialog
onDismissRequest: () -> Unit, //关闭对话框回调confirmButton: @Composable () -> Unit, //确认按钮= null, //取消按钮properties: DialogProperties = DialogProperties(usePlatformDefaultWidth = false), //对话框配置,详见。原创 2024-06-17 17:43:24 · 1461 阅读 · 0 评论 -
Compose 可组合项 - 输入框 TextField、OutlinedTextField、BasicTextField
innerTextField 是输入框的实现,必须并且也只能调用一次这个函数,在 decorationBox 中通过自定义 innerTextField 的调用位置等方式实现自定义自己需要的文本框的目的。Sentences //当输入英文时候,将每个字母的第一个字符大写。Words //当输入英文的时候,将每个字母的第一个字符小写。Characters //将所有的字符大写。代码可设置的内容同 TextField 一样。None //不自动大小写。原创 2024-06-17 16:40:34 · 1545 阅读 · 0 评论 -
Compose 可组合项 - 抽屉式导航栏 Drawer
colors: NavigationDrawerItemColors = NavigationDrawerItemDefaults.colors(), //颜色。shape: Shape = NavigationDrawerTokens.ActiveIndicatorShape.toShape(), //形状。label: @Composable () -> Unit, //名称。onClick: () -> Unit, //点击回调。原创 2024-06-17 16:16:20 · 1174 阅读 · 0 评论 -
Compose 可组合项 - 滑动列表 LazyColumn、LazyRow
可滚动,类似RecyclerView( Column、Row 用 Modifier 设置滚动是相当于ScrollView)。原创 2023-12-20 17:50:53 · 3503 阅读 · 0 评论 -
Compose 可组合项 - 分页器 HorizontalPager、VerticalPager
类似于 ViewPager,1.4 版本之前需要借助 accompanis 库,底层基于 LazyColumn、LazyRow 实现,在使用上也基本相同。默认情况下 HorizontalPager 占据屏幕的整个宽度,VerticalPager 会占据整个高度。原创 2023-10-15 02:34:10 · 2670 阅读 · 0 评论 -
Compose 可组合项 - 下拉刷新 pullRefresh
功能实现采用的是 Modifier 修饰符而不是一个单独的组合项,所以需要提供一个父容器来存放列表和下拉指示器。需求是下拉指示器显示在列表之上,因此选择 Box。原创 2023-11-04 04:16:36 · 1213 阅读 · 0 评论 -
Compose 可组合项 - 一些交互类型
OutLinedButton带外边框、TextButton只是文字、IconButton只是图标形状。原创 2023-08-27 17:19:56 · 1051 阅读 · 0 评论 -
Compose 可组合项 - 一些容器类型
本身不会占用布局中的空间,是在一个单独的窗口中显示的,在其他内容之上。原创 2023-08-27 17:04:03 · 977 阅读 · 0 评论 -
Compose 可组合项 - 一些展示类型
也是组合函数,而不是以对象的形式提供。原创 2023-04-01 23:33:22 · 985 阅读 · 0 评论 -
Compose 可组合项 - 一些布局类型
Composable函数是整个UI中的某一部分界面(称为Layout),执行后会作为一个节点添加到UI树中,然后渲染展示在屏幕上。每个元素都有一个父元素以及可能有多个子元素,每个元素在父元素中都有一个坐标(x,y)和尺寸(width,height)。就是自定义一个 Modifier 的扩展函数,实现它的 layout( ) 方法如何测量及放置自身。形参Lambda有2个参数,measurable用于子元素的测量和放置,constraints约束子元素宽高的最大和最小值。原创 2023-04-02 00:01:03 · 1223 阅读 · 0 评论 -
Composable 自定义 - 一些自用控件的功能实现
针对的是给控件添加点击功能的场景(如Text),通过 Modifier 扩展函数实现。原创 2024-04-18 17:42:30 · 384 阅读 · 1 评论 -
Compose - 使用 Paging
是对其它数据源的封装,因此和 Repository 定义在同一个 .kt 文件中并私有化。自定义一个类继承 PagingSource 并重写 load() 来提供获取页面数据。}.flow//具体获取数据的方法。这里能更细分的对异常处理,否则在load()中合并返回后在UI中难区分。//但处理后还是要抛出异常,不然load()不会返回异常,影响UI中对Paging状态判断Log.e("服务器错误", it.message.toString())原创 2023-11-07 17:29:56 · 1003 阅读 · 0 评论 -
Compose - 使用 Lottie
LottieCompositionSpec是一个密封接口,可以选择动画文件的来源(RawRws、Url、File、Assets、JsonString、ContentProvider)。speed 设置播放速度,iterations 设置播放次数。原创 2023-09-06 20:42:45 · 997 阅读 · 0 评论 -
Compose - 使用 Navigation
使用配置文件便于管理路线名称。原创 2023-04-16 01:18:54 · 3839 阅读 · 2 评论 -
Compose - 自定义作用域限制函数
定义功能(成员方法和属性)。原创 2023-09-01 20:46:10 · 323 阅读 · 0 评论 -
Compose 自定义 - 绘制 Draw
对于自定义绘制,官方为我们提供了三个 Modifier API。在 Lambda 中调用 drawContent() 就是绘制所修饰的内容,由此控制先后顺序,后绘制的会显示在上面。修饰的内容会显示在 Lambda 内容之上(底层是先绘制 Lambda 内容再绘制所修饰的内容,后绘制的会显示在上面)。当绘制复杂效果时,不希望因为重组而重新创建 Lambda 中用于绘制的实例如 Bush、Path 等,这可能会产生内存抖动。原创 2023-10-28 02:22:29 · 847 阅读 · 0 评论 -
Compose 自定义 - 布局 Layout
就是自定义一个 Modifier 的扩展函数,实现它的 layout( ) 方法如何测量及放置自身。形参Lambda有2个参数,measurable用于子元素的测量和放置,constraints约束子元素宽高的最大和最小值。自定义函数的形参需要接收一个Modifier(外部用来修饰该自定义组件的属性或约束),还有一个Composable函数(做为该自定义组件的子元素)。原创 2023-04-03 23:17:46 · 2177 阅读 · 0 评论 -
Compose 自定义 - 约束 Constrains
是当前节点宽高的上下界(最大值和最小值)。在 Layout 阶段,当父节点测量子节点的时候会把 Contraints 往下传递,好让子元素知道自己被允许的最大最小尺寸,当所有子元素被测量完成后开始决定自身尺寸时,同样的需要考虑自身的父容器给出的约束。原创 2024-02-17 00:28:25 · 504 阅读 · 0 评论 -
Compose 自定义 - 数据转UI的三阶段(组合、布局、绘制)
这是一个很简单的例子,事实上 Composable 可以包含逻辑和控制流(if else, when...),在不同的状态下产生不同的UI树。同样地,UI树会自顶向下地遍历,每个节点依次在屏幕上绘制自身。然后 Image 绘制自身,再之后到分支节点Column,Column的第一个Text,Column的第二个Text。多叉树中父节点会测量他们的子节点,然后在一个二维空间里进行摆放。2.测量完子节点后,开始决定自身的尺寸。1.如果存在子节点则测量子节点。3.根据子节点的尺寸摆放子节点。原创 2024-02-16 21:43:58 · 1002 阅读 · 0 评论 -
Compose - 适配(分辨率、大屏、主题、状态栏、国际化)
方式一:在 Color.kt 中定义颜色的不同版本名称和值。//正文//红色//透明方式二:在 res/values/colors.xml 中定义颜色的不同版本名称和值。//正文//红色//透明在 Theme.kt 中创建颜色集类。构造中塞入颜色名称供创建实例的时候指定具体颜色。定义对应的属性并通过 MutableState 包裹提供状态,以便发生改变时所有引用该颜色的组合项会重组。提供 copy() 支持调用处修改某个颜色。(可选)//定义需要的颜色名称) {原创 2023-04-23 22:48:37 · 3179 阅读 · 0 评论 -
Compose - MaterialTheme
直接把任何组合函数用 MaterialTheme{ } 包裹起来,就可以使用相关属性了。也可以单独将某个属性拿出来使用。原创 2023-04-01 23:44:00 · 554 阅读 · 0 评论 -
Compose - 手势
允许应用检测对该元素的点击。原创 2023-04-11 18:37:00 · 771 阅读 · 0 评论 -
Compose 动画 - 共享元素过渡动画 SharedTransitionLayout
共享元素过渡是一种在内容之间具有一致的可组合项之间的无缝过渡方式。它们通常用于导航,当用户在这些屏幕之间导航时,可以直观地将不同的屏幕连接起来。结合 AnimatedContent() 或 AnimatedVisibility() 使用,将内容变化的动画交由系统处理。原创 2024-05-20 17:35:21 · 788 阅读 · 0 评论 -
Compose - 动画
在 View 界面系统中,对于基于时长的动画需要使用 ObjectAnimator 等API,对于基于物理特性的动画需要使用 SpringAnimation。同时使用这两个不同的动画 API 并不容易,Compose 中的 AnimationSpec 够以统一的方式处理这些动画。对于动画的速度曲线的限制,传统属性动画用的是插值器 Interpolator,而在 Compose 中用的是 AnimationSpec。spring可在起始值和结束值之间创建基于物理特性的动画。原创 2023-04-10 23:04:47 · 894 阅读 · 0 评论 -
Compose - 与View互操作
ComposeView负责对Android平台的Activity窗口的适配,AndroidComposeView负责连接LayoutNode视图系统与View视图系统。原创 2023-04-12 01:25:01 · 1305 阅读 · 0 评论 -
Compose - 附带效应 EffectPI
组合函数的特点:执行顺序不定、可以并行执行、可能非常频繁的执行。处理副作用:执行时机要明确、执行次数要可控、不会造成泄漏(释放资源)。Compose生命周期:Enter挂载到树上首次显示、Composition重组刷新UI、Leave从树上移除不再显示。API:LaunchedEffect第一次执行组合函数时调用、DisposableEffect内部有一个onDespose()函数当页面退出时调用、SideEffect每次重组都会调用。原创 2023-04-16 21:11:38 · 605 阅读 · 0 评论 -
Compose - 状态 State
remreber( )可以为组合函数提供数据持久化的功能,remember( )会记住所修饰的值(存储在UI树中),这样在重组后状态不会被初始化(在有添加或移除元素、重组发生在父元素中、屏幕旋转、恢复前台显示的情况下,使用 remember 会造成数据丢失变成初始值,见下方其它方式存储)。有状态组合变为无状态组合需要状态提升,即将状态(数据源和事件) 移出到组合外给调用方处理,具体是将 State 替换为两个形参:要显示的数据(value),对事件的操作 (T) -> Unit,T是新值。原创 2023-04-04 03:34:51 · 1386 阅读 · 0 评论 -
Compose - 全局变量 CompositionLocal
局部变量,中间层或底层要使用通过函数形参层层传递,嵌套深耦合高不利于组合的复用。原创 2023-04-09 23:44:25 · 847 阅读 · 0 评论 -
Compose - 修饰符 Modifier
/自定义测量和摆放//TODO...//去掉涟漪效果clickable(写法过于底层,基本没有太多场景我们需要使用。启动协程作用域): R等待用户输入事件。原创 2023-08-18 21:01:41 · 1289 阅读 · 0 评论 -
Compose - 其它设置、资源获取
下方图片:bigger = 图片宽高都比控件大,smaller=图片宽高都比屏幕小,taller = 图片高于控件高度,longger = 图片宽于控件宽度。在上层覆盖一层颜色(可用于选中后的颜色,适合单一颜色的图片,省去了几套图)。取值范围 0f-1f,默认1f。超出控件更长的边:匹配。超出控件较短的边:留白。超出控件更长的边:裁剪。超出控件较短的边:匹配。超出控件更长的边:裁剪。超出控件较短的边:匹配。超出控件更长的边:匹配。超出控件较短的边:留白。超出控件更长的边:匹配。超出控件较短的边:留白。原创 2023-04-01 23:59:52 · 750 阅读 · 0 评论 -
Compose - 可组合函数 @Composable
原因:调用 forEach() 遍历时,生成4个 Item(子组合项)并依次设置 Element(列表元素),LaunchEffect() 也就输出了4次,但是由于 Item 和 Element 没有一一对应,当列表头部新插入一个 Element 时,会把新 Element 设置到第一个 Item 上,其余 Element 依次设置到后面的 Item 上,最后一个 Element 设置到新生成的 Item 上,因此前四个 Item 发生了重组而最后一个是新增的就不存在重组了。原创 2023-04-01 23:56:42 · 1962 阅读 · 0 评论 -
Compose - 基本使用
Compose会对界面用到的数据自动进行订阅(属性委托),当数据变化时界面会自动更新(同为数据和界面关联,databinding只能更新组件的值,Compose可以控制组件切换显示)。使用该注解的组合函数可以在AndroidStudio右上角直接预览效果和点击交互,也能直接部署该预览在真机或模拟器上查看效果和点击交互。BoM物料清单:随着依赖的库越来越多,为了保证不同库不同版本之间能正常配合,引入依赖时具体的库不指定版本,而是由BoM管理。原因:像 Application 类在预览系统中是不存在的。原创 2023-08-23 18:56:52 · 1019 阅读 · 0 评论