【问题标题】:How can I display vertical divider in Row?如何在 Row 中显示垂直分隔线?
【发布时间】:2022-01-02 12:38:31
【问题描述】:

我想添加一条垂直线来分隔我的 2 个按钮,但是当我这样做时,这条线一直到屏幕底部,我丢失了数据内容。但我希望该行紧跟在按钮帽之后(它们不是真正的按钮,它们是文本框)。

如何使垂直线到达我用红线标记的位置?

Scaffold(
        topBar = {
            TopAppBar( /* Config*/ )
        },

        content = {
            Box(modifier = Modifier.fillMaxSize()) {

                Column {

                    OptionButtons()
                    Divider()
                    Data( /* Component with a list with data */ )
                }
            }
        }
    )
@Composable
fun OptionButtons() {

    Row {

        Text(
            text = "Option1",
            color = OptionButtonText,
            textAlign = TextAlign.Center,
            modifier = Modifier
                .weight(0.50f)
                .padding(
                    PaddingValues(
                        start = 20.dp,
                        top = 12.dp,
                        end = 20.dp,
                        bottom = 12.dp
                    )
                )
                .clickable { }
        )

        Divide()

        Text(
            text = "Option2",
            color = OptionButtonText,
            textAlign = TextAlign.Center,
            modifier = Modifier
                .weight(0.50f)
                .padding(
                    PaddingValues(
                        start = 20.dp,
                        top = 12.dp,
                        end = 20.dp,
                        bottom = 12.dp
                    )
                )
                .clickable { }
        )
    }

}

【问题讨论】:

标签: android kotlin android-jetpack-compose


【解决方案1】:

只需在Row 中添加此modifier = Modifier.height(IntrinsicSize.Min) 即可获得Row 的最小空间:

@Composable
fun OptionButtons() {

    Row(
        modifier = Modifier
            .height(IntrinsicSize.Min),
        horizontalArrangement = Arrangement.SpaceAround
    ) {

        Text(
            text = "Option1",
            color = Color.Red,
            textAlign = TextAlign.Center,
            modifier = Modifier
                .weight(0.50f)
                .padding(
                    PaddingValues(
                        start = 20.dp,
                        top = 12.dp,
                        end = 20.dp,
                        bottom = 12.dp
                    )
                )
                .clickable { }
        )
        Divider(
            modifier = Modifier
                .width(1.dp)
                .fillMaxHeight()
        )
        Text(
            text = "Option2",
            color = Color.Red,
            textAlign = TextAlign.Center,
            modifier = Modifier
                .weight(0.50f)
                .padding(
                    PaddingValues(
                        start = 20.dp,
                        top = 12.dp,
                        end = 20.dp,
                        bottom = 12.dp
                    )
                )
                .clickable { }
        )
    }

}

【讨论】:

  • 非常感谢!这正是我所需要的,效果很好。
【解决方案2】:

您的文本分隔符和文本位于 Row{ } 块中。

你需要做的是像这样构造它

Column{
Row{
Text()
Divider()
Text()
}
Divider()
Row{
Text()
Divider()
Text()
}

}

@Composable
fun OptionButtons() {
    Column {
        Row {
            Text(
                text = "Option1",
                color = OptionButtonText,
                textAlign = TextAlign.Center,
                modifier = Modifier
                    .weight(0.50f)
                    .padding(
                        PaddingValues(
                            start = 20.dp,
                            top = 12.dp,
                            end = 20.dp,
                            bottom = 12.dp
                        )
                    )
                    .clickable { },
            )
            Divider(
                modifier = Modifier
                    .fillMaxHeight()
                    .width(1.dp)
            )
            Text(
                text = "Option2",
                color = OptionButtonText,
                textAlign = TextAlign.Center,
                modifier = Modifier
                    .weight(0.50f)
                    .padding(
                        PaddingValues(
                            start = 20.dp,
                            top = 12.dp,
                            end = 20.dp,
                            bottom = 12.dp
                        )
                    )
                    .clickable { },
            )
        }

        Divider(color = Color.Red, thickness = 1.dp)
        
        Row {
            Text(
                text = ""//whatever value you want to populate with 
                        textAlign = TextAlign . Center,
                modifier = Modifier
                    .weight(0.50f)
                    .padding(
                        PaddingValues(
                            start = 20.dp,
                            top = 12.dp,
                            end = 20.dp,
                            bottom = 12.dp
                        )
                    )

            )
            Divider(
                modifier = Modifier
                    .fillMaxHeight()
                    .width(1.dp)
            )

            Text(
                text = ""//whatever value you want to populate with 
                        textAlign = TextAlign . Center,
                modifier = Modifier
                    .weight(0.50f)
                    .padding(
                        PaddingValues(
                            start = 20.dp,
                            top = 12.dp,
                            end = 20.dp,
                            bottom = 12.dp
                        )
                    )

            )
        }


    }


}

}       
            

【讨论】:

  • 但我也想要两个按钮之间的垂直线。使用这种方法,没有垂直线
  • 我已经编辑了问题
  • 不,上面的答案我丢失了数据部分。仅显示 OptionButton,缺少 Data 部分
  • 编辑了答案。请检查
猜你喜欢
  • 2020-05-14
  • 2019-08-11
  • 2017-11-17
  • 2013-07-09
  • 1970-01-01
  • 2023-03-09
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多