已删除文本 - DPO 请求 - 谢谢

问题描述 投票:0回答:1

已删除文本 - DPO 请求 - 谢谢

delete-file
1个回答
3
投票

我会尽力为您提供解决方案并解释每个步骤。我希望它可以帮助您了解这是如何工作的。

请注意,获得相同结果的方法有很多种。这只是其中之一。

首先你需要一些东西来填满屏幕。我会用一个盒子来做这个。该框在这里很有用,因为我们可以轻松对齐它的子项。我们还将在这里应用背景颜色:

Box(modifier = Modifier
    .fillMaxSize()
    .background(Color(0xFFd2e8d4))
) {

在我的框中,我将创建两列:一列用于 Android 图标、全名和标题;另一列用于创建 Android 图标、全名和标题。以及其他联系人。

在 Codelab 上,他们展示了带有颜色的原型。红色轮廓将是我们的列,蓝色轮廓将是我们的行。

对于我的第一列,我将创建一个中心对齐的列:

Column(
        modifier = modifier
            .padding(horizontal = 16.dp)
            .fillMaxWidth()
            .align(Alignment.Center),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {

请注意,我可以在此处使用

align
,因为此代码位于盒子内。

现在我有了一个居中对齐的列,我将添加带有外部框的图标,只是为了添加它们在 Codelab 上的背景。请注意,我将忽略第一列的蓝线,因为我们不需要行:

Box(modifier = Modifier
            .size(104.dp)
            .background(Color(0xFF073042)),
            contentAlignment = Alignment.Center
        ) {
            Image(
                painter = painterResource(id = R.drawable.android_logo),
                contentDescription = null,
                modifier = Modifier.padding(8.dp)
            )
        }

我还将添加全名元素:

Text(
            text = fullName,
            modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp),
            fontSize = 35.sp
        )

还有标题,应用了不同的颜色:

Text(
            text = title,
            fontSize = 14.sp,
            fontWeight = FontWeight.Bold,
            color = Color(0xFF006d3b)
        )

请注意,我在全名文本中添加了

Modifier.padding(vertical = 8.dp)
,因为我们需要在元素之间留出一些空间。但是,您可以通过在列上使用
verticalArrangement = Arrangement.spacedBy(8.dp)
或在元素之间使用
Spacer(Modifier.height(8.dp))
来实现相同的效果。您可以选择对您的用例更有意义的一个。

现在我们已经完成了第一列,我们将创建联系人列。我们希望该列与屏幕底部对齐。为此,我们将再次使用

align

Column(
        modifier = Modifier
            .padding(horizontal = 16.dp, vertical = 16.dp)
            .width(IntrinsicSize.Max)
            .align(Alignment.BottomCenter),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {

我在这里介绍一下

.width(IntrinsicSize.Max)
。这将告诉我们的列有其最大子项的大小。通过使用它,我们可以保证我们的接触元件都具有相同的尺寸。

正如我之前所说,Codelab 上的蓝线将是我们的行。对于第一列,我没有使用行,因为我们不需要它们(但如果需要,您可以添加行),但对于第二列,我们将需要它们。

我们需要每条接触线都是一行,因为我们将同时有一个图标和一个文本。让我们编写电话联系人的代码:

Row(
            modifier = Modifier
                .fillMaxWidth()
                .padding(bottom = 4.dp),
            horizontalArrangement = Arrangement.Center,
            verticalAlignment = Alignment.CenterVertically
        ) {
            Icon(
                Icons.Default.Call,
                contentDescription = "phone",
                modifier = Modifier.padding(end = 16.dp),
                tint = Color(0xFF006d3b)
            )
            Text(
                text = mobile,
                modifier = Modifier.fillMaxWidth()
            )
        }

注意

Icon
上的色调。我们用它来为我们选择的图标提供正确的颜色。

对于其他联系人,您只需在该列中添加类似的代码即可。

仅此而已。我们完成了布局。这是完整的代码:

Box(modifier = Modifier
    .fillMaxSize()
    .background(Color(0xFFd2e8d4))
) {

    Column(
        modifier = modifier
            .padding(horizontal = 16.dp)
            .fillMaxWidth()
            .align(Alignment.Center),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Box(modifier = Modifier
            .size(104.dp)
            .background(Color(0xFF073042)),
            contentAlignment = Alignment.Center
        ) {
            Image(
                painter = painterResource(id = R.drawable.android_logo),
                contentDescription = null,
                modifier = Modifier.padding(8.dp)
            )
        }
        Text(
            text = fullName,
            modifier = Modifier.padding(vertical = 8.dp),
            fontSize = 35.sp
        )
        Text(
            text = title,
            fontSize = 14.sp,
            fontWeight = FontWeight.Bold,
            color = Color(0xFF006d3b)
        )
    }

    Column(
        modifier = Modifier
            .padding(horizontal = 16.dp, vertical = 16.dp)
            .width(IntrinsicSize.Max)
            .align(Alignment.BottomCenter),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Row(
            modifier = Modifier
                .fillMaxWidth()
                .padding(bottom = 4.dp),
            horizontalArrangement = Arrangement.Center,
            verticalAlignment = Alignment.CenterVertically
        ) {
            Icon(
                Icons.Default.Call,
                contentDescription = "phone",
                modifier = Modifier.padding(end = 16.dp),
                tint = Color(0xFF006d3b)
            )
            Text(
                text = mobile,
                modifier = Modifier.fillMaxWidth()
            )
        }
        Row(
            modifier = Modifier
                .padding(bottom = 4.dp)
                .fillMaxWidth(),
            horizontalArrangement = Arrangement.Center,
            verticalAlignment = Alignment.CenterVertically
        ) {
            Icon(
                Icons.Default.Share,
                contentDescription = "social",
                modifier = Modifier.padding(end = 16.dp),
                tint = Color(0xFF006d3b)
            )
            Text(
                text = social,
                modifier = Modifier.fillMaxWidth()
            )
        }
        Row(
            modifier = Modifier
                .fillMaxWidth()
                .padding(bottom = 4.dp),
            horizontalArrangement = Arrangement.Center,
            verticalAlignment = Alignment.CenterVertically
        ) {
            Icon(
                Icons.Default.Email,
                contentDescription = "email",
                modifier = Modifier.padding(end = 16.dp),
                tint = Color(0xFF006d3b)
            )
            Text(
                text = email,
                modifier = Modifier.fillMaxWidth()
            )
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.