Jetpack Compose是创建本机Android屏幕的非常强大的工具。
尽管该工具的想法是促进屏幕的实现,但如果我们不了解每个组件的目的,那将不是一个艰巨的任务!
考虑这些细节,让我们了解我们应该如何考虑创建屏幕的那一刻。
实施样本
作为演示,让我们使用以下屏幕:
现在我们知道了屏幕,我们需要在开始实施之前了解广泛的分析。
识别视觉元素
作为第一步,我们可以通过识别视觉元素来开始分析。以某种方式,我们有:
- 封面图像
- texto de tÃtulo
- texto de subtÃtulo
- 迷,
- 阅读botan
分析屏幕布局
入口,我们需要分析一般布局。请注意,所有元素均在列中组织,并且存在和植物体排列!
仅通过此分析,我们可以用composable de layout实现屏幕的第一个屏幕:
Column {
AsyncImage(
"https://picsum.photos/1920/1080",
contentDescription = "Imagem de capa"
)
Text(text = "Título")
Text(text = "Subtitulo")
Row {
Icon(
Icons.Outlined.FavoriteBorder,
contentDescription = "ícone de favorito"
)
Button(onClick = { /*TODO*/ }) {
Text(text = "Ler agora")
}
}
}
尽管设计并不忠实于样本,但我们需要遵循下一步的一切,请自定义屏幕的组件。
与网络上的前端进行类比,我们基本上添加了HTML以构建Padgina!
使用修饰符自定义屏幕
就像构造屏幕的组合一样,我们将Modifier
作为自定义的负责任实体,提供行为并对合并事件做出反应。因此,我们将使用它来修改Composable
按照前端的类比,
Modifier
将是JetPack组成的CSS。
调整主容器
我们可以从任何组件开始个性化,但通常遵循策略,从最内部的最外部组件开始,所以让我们从Column
开始更多外部:
Column(
Modifier
.padding(8.dp)
.fillMaxWidth()
.border(
0.5.dp,
Color.Gray.copy(alpha = 0.5f),
RoundedCornerShape(20.dp)
)
) {
...
}
所有合并都以第一个可选的parano a
Modifier
接收,因为有Modifier
模式。有关更多详细信息,您可以verificar nesta thread sobre modificadores.。
请注意,现在我们有一个代表卡的容器的亮点,显示一个空间和圆形的边缘。
个性化封面图像
尽管对卡容器进行了正确调整,但图像仍然具有正方形外观并超过主容器的四肢,为了解决此问题,我们也可以将修饰符应用于图像:
Column(
...
) {
AsyncImage(
"https://picsum.photos/1920/1080",
contentDescription = "Imagem de capa",
Modifier
.height(100.dp)
.clip(
RoundedCornerShape(
topStart = 20.dp,
topEnd = 20.dp
)
),
contentScale = ContentScale.Crop,
placeholder = ColorPainter(Color.Gray)
)
...
}
请注意,修饰符,我使用了一些允许的AsyncImage
:
-
contentScale
:图像容器将具有固定高度,在标准刻度上,它在尝试显示图像的每个容器时会变形。用ContentScale.Crop
施加切割,它显示了在一次性空间中剪切的图像。 -
placeholder
:礼物包含在预览中,并在通过互联网加载图像时,在这种情况下为灰色背景
现在已经调整了封面图像,让我们转到文本。
修改文本
我们可以按以下方式修改文本:
Column(
...
) {
...
Text(
text = "Título",
Modifier.padding(
start = 16.dp,
top = 16.dp,
end = 16.dp,
bottom = 8.dp
),
fontSize = 24.sp
)
Text(
text = "Subtitulo",
Modifier.padding(
start = 16.dp,
end = 16.dp,
bottom = 16.dp
),
fontSize =
14.sp
)
...
}
}
即使文本按预期进行了修改,也值得注意的是,我们必须应用几个。
在这样的情况下,我们可以使用布局组成来简化实现,例如涉及列Text
s并修改列空间并调整垂直布置:
Column(
...
) {
...
Column(
Modifier.padding(16.dp),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
Text(
text = "Título",
fontSize = 24.sp
)
Text(
text = "Subtitulo",
fontSize = 14.sp
)
}
...
}
Row
和Column
都有额外的帕拉诺来操纵他们的孩子,也就是说,由他们组织的组合。
通过此调整,我们的结果与以前相同!简单,您同意吗?最后,我们只需要调整最后一行。
调整排队的和植物
行调整与我们在上一列中所做的非常相似:
Column(
...
) {
...
Row(
Modifier
.padding(16.dp)
.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Icon(
Icons.Outlined.FavoriteBorder,
contentDescription = "ícone de favorito"
)
Button(onClick = { /*TODO*/ }) {
Text(text = "Ler agora")
}
}
}
最大的区别在于宽度与布置和对齐的fillMaxWidth()
的应用。
使用此技术,以便可以应用Arrangement.SpaceBetween
,该Arrangement.SpaceBetween
在四肢组织(已经对齐)的孩子垂直集中了孩子。
包括£o
首先,在编写喷气背包中的屏幕的实现似乎很复杂,我们已经看到我们可以应用一些吨来促进代码的写作。
考虑我们所看到的,我们有:
- 识别视觉元素
- 肛门做布局
- 在每个组件中应用修饰符
- 修改顺序以促进
您如何看待在Jetpack撰写上创建屏幕?您已经使用这些联系或有其他技巧来促进实施?