这个与使用 XML
布局的方式差别很大,setContent
块定义了 Activity
的布局。我们不使用 XML
文件来定义布局内容,而是调用一个 Compose
函数,比如上面的 Text
函数。然后 Jetpack Compose
使用自定义 Kotlin
编译器插件将这些 Compose
函数转换为应用的界面元素。
2.1 Compose
函数
Jetpack Compose
是围绕 Compose
函数构建的,在开发时只需描述应用界面的样式布局和数据依赖关系,而不必关注界面的构建过程。给一个函数添加 @Composable
注解即创建了一个 Compose 函数。注意,Compose
函数只能在其他 Compose
函数的范围内调用。 下面我们将上面示例中的 Text
移动到自定义的 Compose
函数中。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
HelloCompose()
}
}
@Composable
fun HelloCompose() {
Text(“Hello Compose!”)
}
}
2.3 设置点击监听
除了使用 Text
函数,还有其它的基础函数供我们使用,比如 Button
、Image
等。那么如何给 UI
控件设置点击监听呢?在 Compose
框架中提供了两种方式:
-
对于类似
Button
函数的这种,提供了onClick
函数式接口供外部设置点击监听; -
对于类似
Text
函数这种,没有提供显式接口设置的,通过Modifier
类设置点击监听;
Button
函数设置点击事件
@Composable
fun TextButton() {
Button(
onClick = {
Log.d(“Andoter”, this.javaClass.name)
Toast.makeText(this@MainActivity, “Button 点击”, Toast.LENGTH_SHORT).show()
}
) {
Text(text = “Hello Compose!”, color = Color.Red)
}
}
通过设置 onClick
函数即可实现点击实现,注意 Button
函数本身没有设置文本内容,需要通过 Text
函数设置显示文本内容。
Text
函数设置点击事件
@Composable
fun ClickedText() {
val modifier = Modifier.clickable(onClick = {
Log.d(“Andoter”, this.javaClass.name)
Toast.makeText(this@MainActivity, “Button 点击”, Toast.LENGTH_SHORT).show()
})
Text(text = “Hello Compose!”,modifier = modifier.padding(10.dp))
}
通过 Modifier.clickable
的方式实现设置点击事件。Modifier
类不仅能够设置点击事件,还能够设置控件的布局属性。
-
clickable()
:设置点击监听 -
padding()
:在元素周围留出空间 -
fillMaxWidth()
:使可组合项填充其父项给它的最大宽度 -
preferredSize()
:指定元素的首选宽度和高度
2.4 预览
在 Compose
框架中为 Compose
函数提供预览能力,通过给 Compose
函数添加 @Preview
注解即可进行预览。在实际的开发中,预览函数不要发布到线上,所以最佳做法是单独创建不会被应用调用的预览函数用于查看实际效果,专门的预览函数可以提高性能,并且有利于以后更轻松地设置多个预览。
3. 布局
======
在 Jetpack Compose
中一切的元素都是围绕 Compose
函数展开,所以布局也是通过对应的内置 Compose
函数实现。
3.1 Column
和 Row
二者的特点:
-
Column
:使元素按照竖直方向排列; -
Row
:使元素按照水平方向排列; -
Stack
:将一个元素放在另一个元素上。
这里我们以 Column
函数作为示例。
@Preview
@Composable
fun MultiText() {
Text(text = “Hello Compose!”)
Text(“Ant 学习 Compose!”)
}
@Preview
@Composable
fun ColumnText() {
Column {
Text(text = “Hello Compose!”)
Text(“Ant 学习 Compose!”)
}
}
通过 Column
可将组件按照竖直方向排列,预览效果对比:
3.2 ScrollableRow
和 ScrollableColumn
使用 ScrollableRow
或 ScrollableColumn
可使 Row
或 Column
内的元素滚动。
@Composable
fun ProductList() {
ScrollableColumn(Modifier.fillMaxSize()) {
listOf(“Ant”, “Andoter”, “小伟”).forEach { value ->
ProductDetailView(value)
}
}
}
@Composable
fun ProductDetailView(text: String) {
val image = imageResource(id = R.drawable.header)
Column(modifier = Modifier.padding(16.dp)) {
val imageModifier = Modifier
.preferredHeight(180.dp)
.clip(shape = RoundedCornerShape(5.dp))
.fillMaxWidth()
.clickable(onClick = {
Log.d(“Ant”, “click”);
})
Image(image, modifier = imageModifier, contentScale = ContentScale.Crop)
Spacer(modifier = Modifier.preferredHeight(16.dp))
Text(“Hello Compose!”)
}
}
4. Compose
界面结构
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
【延伸Android必备知识点】
【Android部分高级架构视频学习资源】
**Android精讲视频学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水!
**任何市场都是优胜略汰适者生存,只要你技术过硬,到哪里都不存在饱和不饱和的问题,所以重要的还是提升自己。懂得多是自己的加分项 而不是必须项。门槛高了只能证明这个市场在不断成熟化!**另外一千个读者就有一千个哈姆雷特,所以以上只是自己的关键,不喜勿喷!
如果你是卡在缺少学习资源的瓶颈上,那么刚刚好我能帮到你。欢迎关注会持续更新和分享的。
网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水!
**任何市场都是优胜略汰适者生存,只要你技术过硬,到哪里都不存在饱和不饱和的问题,所以重要的还是提升自己。懂得多是自己的加分项 而不是必须项。门槛高了只能证明这个市场在不断成熟化!**另外一千个读者就有一千个哈姆雷特,所以以上只是自己的关键,不喜勿喷!
如果你是卡在缺少学习资源的瓶颈上,那么刚刚好我能帮到你。欢迎关注会持续更新和分享的。