Compose焦点移动问题
焦点设置必须按照以下顺序,否则会有问题
Modifier 说明 必须顺序
focusRequester() 注册焦点请求器 放在 .focusable() 之前
onFocusChanged {} 监听焦点状态变化 放在 .focusable() 之前
focusable() 添加焦点节点 必须在最后!
示例如下:
@Composable
fun Test(modifier: Modifier = Modifier) {
val focusRequester = remember { FocusRequester() }
val focusRequester2 = remember { FocusRequester() }
var color by remember { mutableStateOf(Color.White) }
var color2 by remember { mutableStateOf(Color.White) }
Column {
LaunchedEffect(Unit) {
focusRequester.requestFocus()
}
Text(
"AAA",
modifier = Modifier
.size(200.dp)
.background( color)
.focusRequester(focusRequester)
.onFocusChanged {
Log.d(TAG, "Test: AAA ${it.isFocused}")
color = if (it.isFocused) Color.Red else Color.White
}
.focusable(true)
.clickable {
focusRequester.requestFocus()
}
)
Spacer(modifier = Modifier.height(20.dp))
Text(
"BBB",
modifier = Modifier
.size(200.dp)
.background(color = color2)
.focusRequester(focusRequester2)
.onFocusChanged {
color2 = if (it.isFocused) Color.Red else Color.White
}
.focusable(true)
.clickable {
focusRequester2.requestFocus()
})
}
}
Compose 打印日志出现死循环问题
原本期望记录控制台打印的日志,在compose 方法体中直接调用类似记录日志更新页面方法,如果直接按照注释部分的代码进行拼接,会出现重组死循环问题 compose 不要直接调用更新状态的方法,使用LaunchedEffect等副作用
logContent.value = logContent.value + "\n" + "${Date().toString().substring(10)} $content"