kotlin - 如何在 compose 中选择 4 个 Composabel 中的一个?
问题描述
假设我有四个Button
或Composable
连续,我想选择一个并取消选择另一个,不像单选按钮,但行为完全一样。
@Composable
fun ButtonSet(modifier: Modifier = Modifier) {
Row(
modifier = modifier
.padding(start = 60.dp, end = 60.dp)
.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceEvenly,
) {
val button1 = remember { mutableStateOf(false) }
val button2 = remember { mutableStateOf(false) }
val button3 = remember { mutableStateOf(false) }
val button4 = remember { mutableStateOf(false) }
val buttonList = listOf<Any>(button1, button2, button3, button4)
val activeButton = remember {
mutableStateOf(true)
}
if (button1.value || button2.value || button3.value || button4.value) {
activeButton.value = false
} else if (button1.value) {
button1.value = !button1.value
} else if (button2.value) {
button2.value = !button2.value
} else if (button3.value) {
button3.value = !button3.value
} else if (button4.value) {
button4.value = !button4.value
}
GoalkeeperButton(button1.value)
GoalkeeperButton(button2.value)
GoalkeeperButton(button3.value)
GoalkeeperButton(button4.value)
}
}
@Composable
fun GoalkeeperButton(
active: Boolean = false,
@SuppressLint("ModifierParameter") modifier: Modifier = Modifier,
) {
val buttonState = remember {
mutableStateOf(active)
}
if (!buttonState.value) {
ButtonUnActive() {}
} else {
ButtonActive()
}
RadioButton(selected =, onClick = { /*TODO*/ })
}
@Composable
fun ButtonActive(active: Boolean = true) {
val button = painterResource(id = R.drawable.bttn_pressed)
val gloves = painterResource(id = R.drawable.blue_hands)
val buttonState = remember {
mutableStateOf(active)
}
Column(
modifier = Modifier
.wrapContentWidth()
.height(130.dp)
) {
Image(
painter = gloves,
contentDescription = null,
contentScale = ContentScale.FillBounds,
modifier = Modifier
.size(width = 135.dp, height = 70.dp)
)
Image(
painter = button,
contentDescription = null,
contentScale = ContentScale.FillBounds,
modifier = Modifier
.clickable(onClick = {})
.size(width = 107.dp, height = 65.dp)
)
}
}
@Composable
fun ButtonUnActive(
state: Boolean = false,
onclick: () -> Unit,
) {
val button = painterResource(id = R.drawable.bttn)
var unActiveState by remember {
mutableStateOf(state)
}
Image(
painter = button,
contentDescription = null,
contentScale = ContentScale.FillBounds,
modifier = Modifier
.clickable(
onClick = {
onclick()
},
)
.size(width = 107.dp, height = 65.dp)
)
}
这是我尝试过的,但我知道这是非常糟糕的代码,请提出更好和最好的方法。
解决方案
推荐阅读
- .net - 将 Open Policy Agent 集成到 .Net Core API
- c# - 包管理器 > 系统找不到指定的文件。(来自 HRESULT 的异常:0x80070002)
- microsoft-graph-api - 在 Outlook Graph API 中,在草稿上调用 send 后,消息 ID 似乎发生了变化
- javascript - 在远程开发服务器上使用赛普拉斯测试运行程序
- angular - Angular 6:在模块之间导航不起作用
- java - Spring Boot 忽略配置 Bean,还是构建顺序错误?
- java - 如何从现有地图中的值创建新地图
- node.js - google cloud函数中如何监听多个数据库
- javascript - Ajax 没有收到来自我的“工作 PHP 脚本”的响应
- python - 在按钮上调用网格时触发 Tkinter scale 的命令