我正在Jetpack Compose中构建一个可重用的Button组件,它基本上是Row.按钮的左端应该有一个文本,右端应该有一个图标.它直接向前工作,如下所示:

@Composable
fun MyButton(
    text: String,
    modifier: Modifier = Modifier
) {
    Button(
        onClick = { /* */ },
        modifier = modifier
    ) { // RowScope
        Text(
            text = text
        )
        Spacer(modifier = Modifier.width(8.dp))
        Icon(
            painter = painterResource(
                id = android.R.drawable.ic_dialog_info
            ),
            contentDescription = null
        )
    }
}

但是,如果应用固定宽度的按钮,则文本图标居中,而不在左/右端.

enter image description here

所以我试着在Text的基础上加modifier = Modifier.weight(1F),这样它就会填满任何额外的空间.但这会导致没有固定宽度的按钮占用尽可能多的空间.

enter image description here

如何构建在两种情况下都有效的合成组件:定义宽度时和内容包装时?

我的屏幕布局:

@Composable
fun MyScreen() {
    Column(
        horizontalAlignment = Alignment.CenterHorizontally,
        modifier = Modifier.fillMaxSize()
    ) {
        Spacer(modifier = Modifier.height(8.dp))
        MyButton(
            text = "variable width",
            modifier = Modifier.wrapContentWidth()
        )
        Spacer(modifier = Modifier.height(8.dp))
        MyButton(
            text = "fixed width",
            modifier = Modifier.width(300.dp)
        )
    }
}

推荐答案

您可以使用类似以下内容:

Button(
    onClick = { /* */ },
    modifier = modifier.width(IntrinsicSize.Max)
) { // RowScope
    Text(
        text = text,
        maxLines = 1,
        modifier = Modifier.weight(1f),
        overflow = TextOverflow.Ellipsis
    )
    Spacer(modifier = Modifier.width(8.dp))
    Icon(
        painter = painterResource(
            id = android.R.drawable.ic_dialog_info
        ),
        contentDescription = null
    )
}

enter image description here

Android相关问答推荐

如何正确增加LazyStream中的变量

写入排除例外以进行依赖性判断

将动作传递给嵌套的可组合物

Android Compose Pages 3-一次加载所有页面,无需在LazyColumn中滚动,无需网络调用和内部滚动

两首合成曲的喷气背包动画

如何从sqlite数据库中检索数据到碎片android?

如何从URI中获取图像大小

Jetpack Compose中尺寸不断增加的动画

Jetpack Compose-如何在进入新产品线之前删除单词?

根据另一个数组的值对数组进行排序

在 Android Studio 中获取更新版本的 Picasso 库的错误警告消息

获取 ArithmeticException:除以零,但我没有在任何地方除以零

Android collectAsStateWithLifecycle() 不在可组合内部收集

在 Jetpack Compose 中单击时更改表面项目的背景 colored颜色

为片段设置主题

您如何衡量条形图的 4 个类别?

为什么按钮没有拉伸到屏幕边缘?

0dp 大小的可组合文件是否可以组合?

为什么在try 实例化 Mediaplayer 时会出现 NullPointerException?安卓Kotlin

如何将私有 mutableStateOf 分配给 Android Jetpack 中的 State 变量?