【问题标题】:How to control DropDownMenu position in Jetpack Compose如何控制 Jetpack Compose 中的 DropDownMenu 位置
【发布时间】:2021-08-10 14:08:30
【问题描述】:

我有一排文本在开头对齐,图像在结尾对齐。当我按下图像时,我正在显示一个 DropdownMenu,但它出现在行首,我希望它出现在行尾。

我正在尝试在修改器组件中使用 Alignment.centerEnd 但不起作用。

如何使弹出窗口出现在行尾?

@Composable
fun DropdownDemo(currentItem: CartListItems) {
    var expanded by remember { mutableStateOf(false) }
    Box(modifier = Modifier
        .fillMaxWidth()) {
        Text(modifier = Modifier.align(Alignment.TopStart),
            text = currentItem.type,
            color = colorResource(id = R.color.app_grey_dark),
            fontSize = 12.sp)
        Image(painter = painterResource(R.drawable.three_dots),
            contentDescription = "more options button",
            Modifier
                .padding(top = 5.dp, bottom = 5.dp, start = 5.dp)
                .align(Alignment.CenterEnd)
                .width(24.dp)
                .height(6.75.dp)
                .clickable(indication = null,
                    interactionSource = remember { MutableInteractionSource() },
                    onClick = {
                        expanded = true
                    }))
        DropdownMenu(
            expanded = expanded,
            onDismissRequest = { expanded = false },
            modifier = Modifier
                .background(
                    Color.LightGray
                ).align(Alignment.CenterEnd),
        ) {
            DropdownMenuItem(onClick = { expanded = false }) {
                Text("Delete")
            }
            DropdownMenuItem(onClick = { expanded = false }) {
                Text("Save")
            }
        }
    }
}

【问题讨论】:

    标签: android kotlin android-jetpack-compose composable


    【解决方案1】:

    正如documentation 所说:

    DropdownMenu 的行为类似于 Popup,并将使用父布局的位置在屏幕上定位自身。

    您需要将DropdownMenu 与调用者视图一起放在Box 中。在这种情况下,DropdownMenu 将出现在调用者视图下。

    var expanded by remember { mutableStateOf(false) }
    Column {
        Text("Some text")
        Box {
            Image(
                painter = painterResource(R.drawable.test),
                contentDescription = "more options button",
                modifier = Modifier
                    .clickable {
                        expanded = true
                    }
            )
            DropdownMenu(
                expanded = expanded,
                onDismissRequest = { expanded = false },
            ) {
                DropdownMenuItem(onClick = { expanded = false }) {
                    Text("Delete")
                }
                DropdownMenuItem(onClick = { expanded = false }) {
                    Text("Save")
                }
            }
        }
    }
    

    【讨论】:

    • 此代码 sn-p 将始终在左侧显示下拉菜单。有没有办法让它显示在中心?
    • @kc_dev 它实际上是自动检测方向,如果右侧没有可显示的空间,它将显示在左侧。我不确定材料指南是否认为显示居中是个好主意,如果您找到此类信息 - 您可以 open 提出功能请求。到目前为止,您唯一可以调整的是offset - 您需要测量元素的宽度,如here 所示,并将该值的一半添加到offset 参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 2022-10-20
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多