android - 如何使用jetpack compose将焦点状态设置为Button?
问题描述
compose_version = '1.0.0-beta02'。
我可以通过 FocusRequester 设置焦点状态 TextField,但不能设置 Button。
val requester1 = FocusRequester()
TextField(value = text1,
{ newValue ->
text1 = newValue
},
modifier = Modifier
.focusable(true)
.focusRequester(requester1)
.background(focusedColor1)
.onFocusChanged {
focusedColor1 = if (it.isFocused) {
text1 = "TextField1 focused"
Color.Red
} else {
text1 = "TextField1 unfocused"
Color.Green
}
}
)
将调用 TextField 的方法“onFocusChanged”。
val requester3 = FocusRequester()
Button(
onClick = {
requester3.requestFocus()
},
modifier = Modifier
.focusModifier()
.focusable(true)
.focusRequester(requester3)
.onFocusEvent {
Toast
.makeText(
context,
"Button onFocusEvent it.isFocused:${it.isFocused}. ${it.name}",
Toast.LENGTH_SHORT
)
.show()
}
.onFocusChanged {
Toast
.makeText(
context,
"Button onFocusChanged it.isFocused:${it.isFocused}",
Toast.LENGTH_SHORT
)
.show()
}.background(Color.Red)
) {
Text(text = text2,Modifier.background(Color.Red))
}
但是不会调用Button的“onFocusChanged”方法。
解决方案
使用类似的东西:
val focusRequester = FocusRequester()
val interactionSource = remember { MutableInteractionSource() }
val isFocused = interactionSource.collectIsFocusedAsState().value
// if (isFocused....)
Button(
onClick = {
focusRequester.requestFocus()
},
modifier = Modifier
// add focusRequester modifier before the focusable (or even in the parent)
.focusRequester(focusRequester)
.focusable(interactionSource = interactionSource)
){ ... }
推荐阅读
- python-3.x - python - 自动启动在程序中创建的文本文件
- node.js - 如何使用机器人框架中的每条消息创建和发送反向通道事件?
- docker - 什么是 docker 容器中的卷驱动程序
- websphere-8 - 如何为在 Docker 中运行的 WebSphere8 应用服务器设置
- c++ - 如何解决多次继承的模棱两可的变量名称?
- java - Spring 集成 jpa 存储库测试无法正常工作
- javascript - 如何使用angular2一键禁用按钮
- log4net - log4net:stacktrace 和 stacktracedetails 总是记录日志
- java - Set的用途是什么
> 资源 = 新 java.util.HashSet<>(); - python - 以同步方式写入python中的文件