kotlin 如何删除文本按钮的填充?

wvt8vs2t  于 2023-03-13  发布在  Kotlin
关注(0)|答案(4)|浏览(120)

我试图删除TextButton中的填充,但它不起作用。

TextButton(
    onClick = {},
    modifier = Modifier.padding(0.dp)
) {
    Text(
        " ${getString(R.string.terms_and_conditions)}",
        color = MaterialTheme.colors.primary,
        fontFamily = FontFamily(Font(R.font.poppins_regular)),
        fontSize = 10.sp,
    )
}

我也尝试在Modifier属性中设置heightsize,但填充仍然存在

epggiuax

epggiuax1#

CompositionLocalProvider Package TextButton以覆盖LocalMinimumTouchTargetEnforcement的值。这只会删除额外的边距,但不会修改硬编码的defaultMinSize。

CompositionLocalProvider(
    LocalMinimumTouchTargetEnforcement provides false,
) {
    TextButton(
        onClick = {},
        contentPadding = PaddingValues(),
    ) {
        Text(
            "Button",
            color = MaterialTheme.colors.primary,
            fontSize = 10.sp,
        )
    }
}
xqnpmsa8

xqnpmsa82#

不能使用padding修改器减少填充:它总是在已有的填充之上添加额外的填充。2关于修饰符顺序的更多细节,请参见this reply
您可以使用contentPadding参数通过指定PaddingValues(0.dp)来减少TextButton填充,但这不会完全删除填充。
如果需要完全移除填充,可以改用clickable修改器:

Text(
    "getString(R.string.terms_and_conditions",
    color = MaterialTheme.colors.primary,
    fontFamily = FontFamily(Font(R.font.neris_semi_bold)),
    fontSize = 10.sp,
    modifier = Modifier
        .clickable {
            // onClick()
        }
)

如果要更改涟漪的颜色(如在TextButton中所做的那样),可以执行以下操作:

.clickable(
    interactionSource = remember { MutableInteractionSource() },
    indication = rememberRipple(color = MaterialTheme.colors.primary),
) {
    
}
mbskvtky

mbskvtky3#

您可以通过更改**contentPadding**并应用固定大小来实现:

TextButton(
    onClick = {},
    contentPadding = PaddingValues(0.dp),
    modifier = Modifier.height(20.dp).width(40.dp)
) {
    Text(
        "Button",
        color = MaterialTheme.colors.primary,
        fontSize = 10.sp,
    )
}

第一节第一节第一节第一节第一次

ebdffaop

ebdffaop4#

如果您遇到不需要的边距。当您在任何Button函数中使用onclick时,它会在视图表面内设置propagateMinConstraints = true-这将应用于不需要的边距。解决此问题的示例:

@Composable
fun ButtonWithoutOuterPadding(
    onClick: () -> Unit,
    modifier: Modifier = Modifier,
    shape: Shape = RectangleShape,
    elevation: Dp = 0.dp,
    color: Color = Color.Transparent,
    border: BorderStroke? = null,
    contentAlignment: Alignment = Alignment.Center,
    content: @Composable () -> Unit
) {
    Box(
        modifier
            .shadow(elevation, shape, clip = false)
            .then(if (border != null) Modifier.border(border, shape) else Modifier)
            .background(
                color = color,
                shape = shape
            )
            .clip(shape)
            .then(
                Modifier.clickable(
                    interactionSource = remember { MutableInteractionSource() },
                    indication = LocalIndication.current,
                    enabled = true,
                    onClickLabel = null,
                    role = null,
                    onClick = onClick
                )
            ),
        contentAlignment = contentAlignment,
        propagateMinConstraints = false
    ) {
        content()
    }
}

相关问题