2

几个小时以来,我一直在尝试实现以下设计,但无法找到使用 Jetpack Compose 解决此问题的最佳方法,而且我找不到描述 Compose 布局方法/指南的可靠文档。

我尝试了很多东西,包括以下嵌套,但没有运气:

Container
 Row - green background, align Top
 Row - white background, align Buttom
 Container (Form) - align Center

我怎样才能实现这个设计?

谢谢!

在此处输入图像描述

4

3 回答 3

3

我认为堆栈布局会帮助你。像这样

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MainContainer()
        }
    }
}

@Preview
@Composable
fun MainContainer() {
    Stack {

        Align(Alignment.TopCenter) {
            Column(arrangement = Arrangement.Center) {
                Container(
                    background(Color.Green),
                    alignment = Alignment.TopCenter,
                    //height = 350.dp,
                    width = 450.dp,
                    expanded = true
                ) {
                    Text("Up")
                }
            }
        }

        Align(alignment = Alignment.BottomCenter) {
            Column(background(Color.Yellow), arrangement = Arrangement.Center) {
                Container(alignment = Alignment.Center, height = 350.dp, width = 450.dp) {
                    Text("Down")
                }
            }
        }

        Align(Alignment.Center) {
            Column(background(Color.White), arrangement = Arrangement.Center) {
                Container(alignment = Alignment.Center, height = 250.dp, width = 250.dp) {
                    Clip(shape = RoundedCornerShape(8.dp)) {
                        LoginContainer()
                    }
                }
            }
        }
    }
}

@Composable
fun LoginContainer() {
    Column {
        Text("Username")
        Text("Password")
        Button("Login")
    }
}

您可以在此处查看示例输出

于 2020-02-18T07:00:31.657 回答
2

另一个答案,因为根据文档“堆栈已重命名为 Box。” 而“gravity = ContentGravity.Center”似乎不再存在

@Composable
fun content(){
    Box {
        Column {
            Row(
                children = {},
                modifier = Modifier
                    .weight(1f)
                    .background(purple500)
                    .fillMaxWidth()
            )
            Row(
                children = {},
                modifier = Modifier
                    .weight(1f)
                    .background(purple200)
                    .fillMaxWidth()
            )
        }
    }
}
于 2021-01-31T06:29:41.697 回答
1

您还可以使用具有Box中心重心的父级Column和两个相等的Row

@Composable
fun TwoAreas() {
    Box(contentAlignment = Alignment.Center) {
        Column {
            Row(modifier = Modifier.weight(1.0f).fillMaxWidth()
                .background(color = Color.Red)) {
            }

            Row(modifier = Modifier.weight(1.0f).fillMaxWidth()
                .background(color = Color.Blue)) {
            }
        }

        Box(modifier = Modifier.background(color = Color.Black).height(100.dp).width(100.dp))
    }
}
于 2020-04-26T01:30:42.093 回答