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(二) :布局,android开发技术周报 -> 正文阅读

[移动开发]初识 Jetpack Compose(二) :布局,android开发技术周报

通过Row的源码可以看到我们还可以传递如下几个参数:

@Composable

inline fun Row(

modifier: Modifier = Modifier,

horizontalArrangement: Arrangement.Horizontal = Arrangement.Start,

verticalAlignment: Alignment.Vertical = Alignment.Top,

content: @Composable RowScope.() -> Unit

) {

}

| 参数 | 类型 | 默认值 | 含义 |

| — | — | — | — |

| modifier | Modifier | Modifier | 布局的修饰符 |

| horizontalArrangement | Arrangement.Horizontal | Arrangement.Start | 布局子级的 水平 放置方式,默认从布局开始往布局结束方向放置 |

| verticalAlignment | Alignment.Vertical | Alignment.Top | 布局子级的 垂直 对其方式,默认从布局顶部对齐 |

例如:

1630396946(1).jpg

需要注意的是,和LinearLayout一样,超出布局设置的最大宽度或高度的视图将不可见

2. Column

Column可以理解为Xml布局中LinearLayoutvertical模式,例如:

@Composable

fun MainPage() {

Column(Modifier.padding(Dp(50f))) {

Text(text = “Hello”)

Text(text = “,”)

Text(text = “jetpack compose!”)

}

}

通过Column的源码可以看到我们还可以传递如下几个参数:

@Composable

inline fun Column(

modifier: Modifier = Modifier,

verticalArrangement: Arrangement.Vertical = Arrangement.Top,

horizontalAlignment: Alignment.Horizontal = Alignment.Start,

content: @Composable ColumnScope.() -> Unit

) {

}

| 参数 | 类型 | 默认值 | 含义 |

| — | — | — | — |

| modifier | Modifier | Modifier | 布局的修饰符 |

| verticalArrangement | Arrangement.Vertical | Arrangement.Top | 布局子级的 竖直 放置方式,默认从布局顶部往布局底部方向放置 |

| horizontalAlignment | Alignment.Horizontal | Alignment.Start | 布局子级的 水平 对其方式,默认从布局开始对齐 |

Column有和Row同样的问题,注意用于修饰Column子级放置和对其方式和Row的参数是不一样的

3. Box

Box可以理解为Xml布局中FrameLayout,例如:

@Composable

fun MainPage() {

Box(Modifier.size(Dp(300f), Dp(150f)),

contentAlignment = Alignment.Center) {

Box(modifier = Modifier

.background(MaterialTheme.colors.error)

.size(Dp(200f), Dp(100f)))

Box(modifier = Modifier

.background(MaterialTheme.colors.secondary)

.size(Dp(100f), Dp(50f)))

Text(text = “hello,jetpack compose!”)

}

}

1630400177.jpg

通过Column的源码可以看到我们还可以传递如下几个参数:

@Composable

inline fun Box(

modifier: Modifier = Modifier,

contentAlignment: Alignment = Alignment.TopStart,

propagateMinConstraints: Boolean = false,

content: @Composable BoxScope.() -> Unit

) {

}

| 参数 | 类型 | 默认值 | 含义 |

| — | — | — | — |

| modifier | Modifier | Modifier | 布局的修饰符 |

| contentAlignment | Alignment | Alignment.TopStart | Box 内的默认对齐方式 |

| propagateMinConstraints | Boolean | false | 传入的最小约束是否应传递给内容。 |

4. BoxWithConstraints

如需了解来自父项的约束条件并相应地设计布局,您可以使用?BoxWithConstraints。您可以在内容 lambda 的作用域内找到测量约束条件

BoxWithConstraintsBox 使用方式完全一致,只是如官方所说,可以测量约束条件,例如:

@Composable

fun MainPage1() {

BoxWithConstraints {

Text(“My minHeight is $maxHeight while my maxWidth is $maxWidth”)

}

}

在其作用域内可以拿到 BoxWithConstraints的最大最小宽高信息。

5. ConstraintLayout

ConstraintLayout 其实就是Xml布局中的 ConstraintLayout,我们来看官方的描述

ConstraintLayout?有助于根据可组合项的相对位置将它们放置在屏幕上,它是使用多个嵌套?RowColumnBox?和自定义布局元素的替代方案。在实现对齐要求比较复杂的较大布局时,ConstraintLayout?很有用。

注意:在 View 系统中,建议使用?ConstraintLayout?来创建复杂的大型布局,因为扁平视图层次结构比嵌套视图的性能更好。不过,这在 Compose 中不是什么问题,因为它能够高效地处理较深的布局层次结构。

注意:是否将?ConstraintLayout?用于 Compose 中的特定界面取决于开发者的偏好。在 Android View 系统中,使用?ConstraintLayout?作为构建更高性能布局的一种方法,但这在 Compose 中并不是问题。在需要进行选择时,请考虑?ConstraintLayout?是否有助于提高可组合项的可读性和可维护性。

可以看出,虽然官方提供了ConstraintLayout,但并不推荐在Compose中使用,xml中使用ConstraintLayout的根本目的是为了减少视图嵌套层级从而提升android的页面绘制性能,在Compose中不存在视图嵌套这一概念,所以是否使用ConstraintLayout,需要考虑个人习惯和?ConstraintLayout?是否有助于提高可组合项的可读性和可维护性。

在使用ConstraintLayout前,需要在?build.gradle?中添加以下依赖项:

implementation “androidx.constraintlayout:constraintlayout-compose:1.0.0-alpha08”

Compose 中的?ConstraintLayout?支持?DSL

  • 引用是使用?createRefs()?或?createRefFor()?创建的,ConstraintLayout?中的每个可组合项都需要有与之关联的引用。

  • 约束条件是使用?constrainAs()?修饰符提供的,该修饰符将引用作为参数,可让您在主体 lambda 中指定其约束条件。

  • 约束条件是使用?linkTo()?或其他有用的方法指定的。

  • parent?是一个现有的引用,可用于指定对?ConstraintLayout?可组合项本身的约束条件。

依旧看下实例:

@Composable

fun MainPage() {

ConstraintLayout(Modifier.size(200.dp)) {

val (button, text) = createRefs()

Button(

onClick = { },

modifier = Modifier.constrainAs(button) {

top.linkTo(parent.top)

start.linkTo(parent.start)

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

end.linkTo(parent.end)

bottom.linkTo(parent.bottom)

},

colors = ButtonDefaults.buttonColors(

backgroundColor = MaterialTheme.colors.secondary,

contentColor = Color.White

)

) {

Text(“Button”)

}

Text(“Text”, Modifier.constrainAs(text) {

top.linkTo(button.top)

})

}

}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-14 16:03:59  更:2021-12-14 16:06:46 
 
开发: 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/24 8:43:57-

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