android - 如何使 Jetpack Compose DropDown Menu 弹出项目更宽?

标签 android android-jetpack-compose

我有一个 Dropdown可用作选择的可组合 View 。

@Composable
fun <T> DropdownDemo(modifier: Modifier, items: List<T>, selected: MutableState<T>) {
    var expanded by remember { mutableStateOf(false) }
    Box(modifier = modifier.fillMaxWidth()) {
        Text(
            selected.value.toString(),
            modifier = Modifier
                .background(Color.LightGray)
                .fillMaxWidth()
                .clickable(
                    onClick = { expanded = true })
                .padding(16.dp, 0.dp)
        )
        DropdownMenu(
            expanded = expanded,
            onDismissRequest = { expanded = false },
            modifier = Modifier.fillMaxWidth(),
        ) {
            items.forEachIndexed { index, select ->
                DropdownMenuItem(
                    onClick = {
                        selected.value = items[index]
                        expanded = false
                    },
                    modifier = Modifier.fillMaxWidth(),
                ) {
                    Text(text = select.toString(), modifier = Modifier.fillMaxWidth())
                }
            }
        }
    }
}
没有点击时,Text显示的是填满整个宽度。但是,单击并展开时,弹出窗口无法完全展开,即使我设置了Modifier.fillMaxWidth()DropdownMenuDropdownMenuItem .
enter image description here
我怎样才能弹出DropdownMenu更宽的?

最佳答案

您可以复制 DropdownMenuItemContent 并对其进行修改以允许传入最小和最大宽度

@Composable
fun AdjustableWidthDropdownMenuItem(
    onClick: () -> Unit,
    modifier: Modifier = Modifier,
    enabled: Boolean = true,
    contentPadding: PaddingValues = MenuDefaults.DropdownMenuItemContentPadding,
    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
    minWidth: Dp = 112.dp,
    maxWidth: Dp = 280.dp,
    content: @Composable RowScope.() -> Unit,
) {
    Row(
        modifier = modifier
            .clickable(
                enabled = enabled,
                onClick = onClick,
                interactionSource = interactionSource,
                indication = rememberRipple(true)
            )
            .fillMaxWidth()
            .sizeIn(
                minWidth = minWidth,
                maxWidth = maxWidth,
                minHeight = 48.dp
            )
            .padding(contentPadding),
        verticalAlignment = Alignment.CenterVertically
    ) {
        val typography = MaterialTheme.typography
        ProvideTextStyle(typography.subtitle1) {
            val contentAlpha = if (enabled) ContentAlpha.high else ContentAlpha.disabled
            CompositionLocalProvider(LocalContentAlpha provides contentAlpha) {
                content()
            }
        }
    }
}

关于android - 如何使 Jetpack Compose DropDown Menu 弹出项目更宽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67004123/

相关文章:

Android Studio 非常缓慢和滞后

android - 对应新GCM中的GCMRegistrar.isRegistered()

android - 理论上在游戏中使用 fontawesome(图标)

Android ffmpeg0.8 不能用 android ndk5 和 cygwin 编译器编译

android - JetPack Compose Pager 的 onPageSelected 回调

zxing - 在 Jetpack compose 中使用 Zxing 库

android - 如果从 Play 商店下载应用程序,设备上是否有 Play 服务?

kotlin - Android Jetpack Compose 协调器布局等效项

android - 如何 fillMaxSize() Box() inside row - Compose

Android Jetpack Compose 全宽抽屉