Как изменить цвет фона кнопки одним нажатием кнопки
Я пытаюсь изменить цвет фона кнопки при нажатии этой кнопки в Android Jetpack Compose.
3 ответа
Решение
Вы можете сделать это так, используя 1.0.0-alpha11
@Composable
fun ButtonColor() {
val selected = remember { mutableStateOf(false) }
Button(colors = ButtonDefaults.buttonColors(
backgroundColor = if (selected.value) Color.Blue else Color.Gray),
onClick = { selected.value = !selected.value }) {
}
}
В ситуации, когда ваш цвет снова меняется, когда вы отпускаете кнопку, попробуйте следующее:
@Composable
fun ButtonColor() {
val color = remember { mutableStateOf(Color.Blue) }
Button(
colors = ButtonDefaults.buttonColors(
backgroundColor = color.value
),
onClick = {},
content = {},
modifier = Modifier.pointerInteropFilter {
when (it.action) {
MotionEvent.ACTION_DOWN -> {
color.value = Color.Yellow }
MotionEvent.ACTION_UP -> {
color.value = Color.Blue }
}
true
}
)
}
С
1.0.0-beta02
вы можете использовать <strong>
<tcode id="30936100"></tcode></strong> и
collectIsPressedAsState()
свойство.
Что-то вроде:
val interactionSource = remember { MutableInteractionSource() }
val isPressed by interactionSource.collectIsPressedAsState()
// Use the state to change our UI
val color = if (isPressed) Color.Blue else Color.Yellow
Column() {
Button(
onClick = {},
interactionSource = interactionSource,
colors= ButtonDefaults.buttonColors(backgroundColor = color)
){
Text(
"Button"
)
}
}
В Jetpack Compose такой эффект должен быть реализован с помощью InteractionResource , вот простой пример.
@Composable
fun MyButton(){
val interactionSource = remember { MutableInteractionSource() }
val isPressed by interactionSource.collectIsPressedAsState()
val bgcolor = if (isPressed) Color.Red else Color.White
val borderColor = if (isPressed) Color.White else Color.Red
OutlinedButton(
onClick = {
}, modifier = Modifier
.fillMaxWidth()
.height(40.dp),
shape = RoundedCornerShape(8.dp),
border = BorderStroke(1.dp, borderColor),
interactionSource = interactionSource,
colors = ButtonDefaults.outlinedButtonColors(backgroundColor = bgcolor)
) {
Text(text = "button", color=borderColor)
}
}