chu*_*ung 4 android kotlin iconbutton android-jetpack-compose
IconButton
我想在图标下方制作一个带有文字的图标。我尝试将这些与宽度相关的方法应用于Modifier
所有IconButton
、Column
和Icon
。Text
下面的代码是我得到的最接近的。结果看起来像这样。这就是我想要实现的目标。
@Composable
fun IconButtonWithTextBelow(
title: String,
@DrawableRes imageId: Int,
onClick: () -> Unit
) {
IconButton(
onClick = onClick,
modifier = Modifier.requiredWidth(IntrinsicSize.Max)
) {
Column(
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier.requiredWidth(IntrinsicSize.Max)
) {
Icon(
painter = painterResource(id = imageId),
contentDescription = title,
)
Text(
text = title,
)
}
}
}
Run Code Online (Sandbox Code Playgroud)
顾名思义IconButton
,它仅用于显示Icon
。即使使用静态大小修改器增加容器的大小,您也会发现单击时的波纹仍然太小。
你可以使用TextButton
,我可以用Icon
+很好地工作Text
,你只需要指定contentColor
:默认IconButton
使用,所以你也可以使用它。LocalContentColor.current
TextButton(
onClick = { /*TODO*/ },
colors = ButtonDefaults.textButtonColors(contentColor = LocalContentColor.current)
) {
Column(
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier
) {
Icon(
painter = painterResource(id = imageId),
contentDescription = title,
)
Text(
text = title,
)
}
}
Run Code Online (Sandbox Code Playgroud)
TextButton
但未来的实现可能会发生变化,毕竟名称只是说明了Text
这一点。
因此,更好的选择是仅clickable
在您的Column
, 或上使用修饰符padding
。结果几乎是一样的。
Column(
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier
.padding(10.dp)
.clickable(
onClick = onClick,
role = Role.Button,
)
) {
Icon(
painter = painterResource(id = imageId),
contentDescription = title,
)
Text(
text = title,
)
}
Run Code Online (Sandbox Code Playgroud)