我面临着这个奇怪的问题,fillMaxWidth(fraction = ...)有一个AlertDialog和Button,其中Button最初以一种尺寸显示,点击它就会缩小到包装它的内容.这是我能创建的最基本的例子.我try 过Compose的多个版本,但它们都做同样的事情.有什么主意吗?

AlertDialog(
    modifier = modifier,
    onDismissRequest = {},
    text = { },
    buttons = {
        Button(
            onClick = { },
            modifier = Modifier
                .fillMaxWidth(0.75f)
                .padding(start = 12.dp, end = 12.dp, bottom = 8.dp)
            ) {
                Text(text = "Done")
            }
        }
    )

Before click:

Button fills size of AlertDialog

After click:

Button's width has shrunk

推荐答案

我认为你必须为AlertDialog定义一个具体的宽度,它的任何一个子元素都可能无法计算出unknown的75%的宽度.

要么填充对话框的最大宽度

 AlertDialog(
       modifier = Modifier.fillMaxWidth(),
       ...

enter image description here

或指定实际DP宽度

AlertDialog(
    modifier = Modifier.width(150.dp),
    ...

enter image description here

我不想抛出我无法解释的行话,但我怀疑当AlertDialog没有任何特定的宽度时,它无法为其子代提供任何传入测量,在这种情况下,Button无法在初始显示上计算unknown width的75%,看起来所有的大小计算只有在对按钮进行操作后才会发生,也许recomposition正在幕后进行正确的测量.

Android相关问答推荐

房间打开创建回调java.nio.channels. OverlappingFilLockResponse

Android Kotlin DSL Gradle找不到自定义存储库中的依赖项

不能在LazyGrid-Jetpack Compose中使用填充最大宽度或填充父项最大宽度

穿戴与iPhone连接的安卓操作系统

在androidStudio中,如何使用带有ResolutionStrategy的ResolutionSelector而不是setTargetResolve()?

如何在Jetpack Compose中将对象的移动从一个路径平滑地切换到另一个路径?

如何在Android中将以前的数据保存在复选框中?

触发PurchasesUpdatedListener回调时,billingClient.launchBillingFlow之前设置的成员变量丢失

如何共享没有';t是否存在?(仅信息)在Android?

如何使用 Wea​​r OS 上的运行状况服务模拟位置?

Android Studio Relay插件(版本0.3.07)错误

Jetpack Compose 中的用户在线指示器

为一组闪烁的可组合项制作动画,控制同步/定时

我的自定义小吃店不适合我的全宽屏幕尺寸

NFC getNdefMessage 在 Android 13 上写入标签后返回 null

如何在jetpack compose中通过lamda返回columnScope/RowScope

Int 传递给 Intent 但Android工作室说我传递了一个字符串

如何在jetpack compose中创建自定义rememberState?

(Android) 如何在一对多关系中将子 ID 与父级匹配

即使我在单选按钮上明确设置了选中状态,RecyclerView 中的单选按钮也会随机取消选中