Android 按钮上的下拉列表单击“撰写”
如何在单击按钮时创建下拉菜单项。在喷气背包里 如此处所示,但对于按钮:Android 按钮上的下拉列表单击“撰写”,android,android-jetpack-compose,Android,Android Jetpack Compose,如何在单击按钮时创建下拉菜单项。在喷气背包里 如此处所示,但对于按钮: DropdownMenu( expanded = expanded, onDismissRequest = { expanded = false }, toggle = iconButton, dropdownOffset = Position(24.dp, 0.dp), toggleModif
DropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false },
toggle = iconButton,
dropdownOffset = Position(24.dp, 0.dp),
toggleModifier = modifier
) {
options.forEach {
DropdownMenuItem(onClick = {}) {
Text(it)
}
}
}
您可以使用以下内容:
var expanded by remember { mutableStateOf(false) }
Button(onClick = { expanded = true }){
Text ("...")
}
DropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false },
//....
) {
items.forEachIndexed { index, s ->
//....
}
}
您可以使用以下内容:
var expanded by remember { mutableStateOf(false) }
Button(onClick = { expanded = true }){
Text ("...")
}
DropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false },
//....
) {
items.forEachIndexed { index, s ->
//....
}
}
前面的答案是正确的,但缺少关键部分。下拉菜单和打开它的按钮都被包装在框中。只有这样,打开按钮才会用作菜单的锚定按钮。 这是我的版本:
@Composable
fun DropdownMenu(
colorSelected: Color = scColors.primary,
colorBackground: Color = scColors.onSurface,
expanded: Boolean,
selectedIndex: Int,
items: List<String>,
onSelect: (Int) -> Unit,
onDismissRequest: () -> Unit,
content: @Composable () -> Unit
) {
Box {
content()
DropdownMenu(
expanded = expanded,
onDismissRequest = onDismissRequest,
modifier = Modifier
.height(300.dp)
.fillMaxWidth()
.background(
color = colorBackground,
shape = RoundedCornerShape(16.dp)
)
) {
items.forEachIndexed { index, s ->
if (selectedIndex == index) {
DropdownMenuItem(
modifier = Modifier
.fillMaxWidth()
.background(
color = colorSelected,
shape = RoundedCornerShape(16.dp)
),
onClick = { onSelect(index) }
) {
Text(
text = s,
color = Color.Black,
textAlign = TextAlign.Center,
modifier = Modifier.fillMaxWidth()
)
}
} else {
DropdownMenuItem(
modifier = Modifier.fillMaxWidth(),
onClick = { onSelect(index) }
) {
Text(
text = s,
color = Color.DarkGray,
textAlign = TextAlign.Center,
modifier = Modifier.fillMaxWidth()
)
}
}
}
}
}
}
前面的答案是正确的,但缺少关键部分。下拉菜单和打开它的按钮都被包装在框中。只有这样,打开按钮才会用作菜单的锚定按钮。 这是我的版本:
@Composable
fun DropdownMenu(
colorSelected: Color = scColors.primary,
colorBackground: Color = scColors.onSurface,
expanded: Boolean,
selectedIndex: Int,
items: List<String>,
onSelect: (Int) -> Unit,
onDismissRequest: () -> Unit,
content: @Composable () -> Unit
) {
Box {
content()
DropdownMenu(
expanded = expanded,
onDismissRequest = onDismissRequest,
modifier = Modifier
.height(300.dp)
.fillMaxWidth()
.background(
color = colorBackground,
shape = RoundedCornerShape(16.dp)
)
) {
items.forEachIndexed { index, s ->
if (selectedIndex == index) {
DropdownMenuItem(
modifier = Modifier
.fillMaxWidth()
.background(
color = colorSelected,
shape = RoundedCornerShape(16.dp)
),
onClick = { onSelect(index) }
) {
Text(
text = s,
color = Color.Black,
textAlign = TextAlign.Center,
modifier = Modifier.fillMaxWidth()
)
}
} else {
DropdownMenuItem(
modifier = Modifier.fillMaxWidth(),
onClick = { onSelect(index) }
) {
Text(
text = s,
color = Color.DarkGray,
textAlign = TextAlign.Center,
modifier = Modifier.fillMaxWidth()
)
}
}
}
}
}
}
不知道您想要实现什么,但是参数切换可以用于您想要的任何东西。因此,如果您想要一个常规按钮而不是图标按钮,只需将其替换为
toggle={button(onClick={setExpanded(!expanded)}{Text(“Open Dropdown”)}
。我希望这对您有所帮助。不知道您想要实现什么,但参数切换可以用于任何您想要的。因此,如果您想要一个常规按钮而不是图标按钮,只需将其替换为toggle={button(onClick={setExpanded(!expanded)}{Text(“Open Dropdown”)}
。我希望这对你有帮助。