无法更改 DropdownMenu 的背景

Tra*_*Nam 6 android drop-down-menu android-jetpack-compose android-compose-dropdownmenu

我正在尝试按照本教程进行操作

但我需要更多关于下拉列表的自定义用户界面。我需要将弹出背景设置为圆形。但是当我添加.clip(RoundedCornerShape(20))到 s 修饰符中时DropdownMenu,它仍然具有白色背景

下面是我的测试可组合代码:

@ExperimentalFoundationApi
@ExperimentalCoilApi
@Composable
fun TestScreen(
   navigator: AppNavigator,
) {
    var expanded by remember { mutableStateOf(false) }
    val items = listOf("A", "B", "C", "D", "E", "F")
    val disabledValue = "B"
    var selectedIndex by remember { mutableStateOf(0) }
    Box(
        modifier = Modifier
            .fillMaxSize()
            .background(Color.Cyan)
            .padding(top = 70.dp)
            .wrapContentSize(Alignment.TopStart)
    ) {
        Text(
            items[selectedIndex],
            modifier = Modifier
                .fillMaxWidth()
                .clickable(onClick = { expanded = true })
                .background(
                    Color.Gray
                )
        )
        DropdownMenu(
            expanded = expanded,
            onDismissRequest = { expanded = false },
            modifier = Modifier
                .fillMaxWidth()
                .clip(RoundedCornerShape(20))
                .background(
                    Color.Red
                )
        ) {
            items.forEachIndexed { index, s ->
                DropdownMenuItem(onClick = {
                    selectedIndex = index
                    expanded = false
                }) {
                    Text(text = s)
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我仍然可以剪辑、绘制边框、设置背景颜色。但白色背景仍然存在。

我试图查看它的源代码DropDownMenu,但似乎找不到它的位置。我是 Jetpack Compose 的新手,所以也许我错过了一些东西。

Phi*_*hov 12

DropdownMenu由于默认参数,看起来像这样Card

您可以更改MaterialTheme整个应用程序的相关参数或覆盖单个视图的相关参数,如下所示:

MaterialTheme(
    colors = MaterialTheme.colors.copy(surface = Color.Red),
    shapes = MaterialTheme.shapes.copy(medium = RoundedCornerShape(20))
) {
    DropdownMenu(
        expanded = expanded,
        onDismissRequest = { expanded = false },
        modifier = Modifier
            .fillMaxWidth()
    ) {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)


Jef*_* Ma 11

implementation "androidx.compose.material3:material3:1.0.0-alpha16"
Run Code Online (Sandbox Code Playgroud)

通过上面的依赖项,您可以使用以下命令更改 DropdownMenu 背景颜色Modifier

modifier = Modifier.background(Color.Blue),

@Composable
fun ListItemPopupMenu(
    menuItems: List<String>,
    onClickListeners: List<() -> Unit>,
    onDismiss: () -> Unit,
    showMenu: Boolean,
) {
    DropdownMenu(
        modifier = Modifier.background(Color.Blue),
        expanded = showMenu,
        onDismissRequest = { onDismiss() },
    ) {
        menuItems.forEachIndexed { index, item ->
            DropdownMenuItem(
                text = { Text(text = item) },
                onClick = {
                    onDismiss()
                    onClickListeners[index].invoke()
                }
            )
        }
    }
}

Run Code Online (Sandbox Code Playgroud)

这是预览

@Preview
@Composable
fun PreviewListItemPopupMenu() {
    var expanded by remember { mutableStateOf(true) }

    ListItemPopupMenu(
        menuItems = listOf("Menu1", "Menu2"),
        onClickListeners = listOf(
            {
                // do nothing
            },
            {
                // do nothing
            }
        ),
        onDismiss = {
            expanded = false
        },
        showMenu = expanded
    )
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述