android onSizeChanged在每次重组时被调用

e3bfsja2  于 2022-11-27  发布在  Android
关注(0)|答案(1)|浏览(257)

我正在开发compose基于UI的android应用程序。我需要获取可组合的大小,并获取每个真实的更改的大小。我检查了onSizeChanged的基本代码。onSizeChanged创建修饰符扩展OnRemeasuredModifier并存储以前的size,但在每次重新组合后,前面的代码被重置,这会导致无限调用onSizeChanged。我尝试了composed,但没有帮助。下面是一个示例代码:

var counter by remember { mutableStateOf(0) }
LaunchedEffect(key1 = counter, block = {
    delay(1000)
    counter++
})
Box(
    modifier = Modifier.fillMaxSize(),
    contentAlignment = Alignment.Center
) {
    Text(
        modifier = Modifier
            .onSizeChanged {
                it
            }
            .composed {
                Modifier.onSizeChanged {
                    it
                }
            },
        text = "Hello, $counter!",
        color = Color.Black
    )
  }
}
juzqafwq

juzqafwq1#

我实现的解决方案是记住onSizeChangedModifier以保存以前的大小。但我不确定这是正确的方法。

var counter by remember { mutableStateOf(0) }
LaunchedEffect(key1 = counter, block = {
    delay(1000)
    counter++
})
Box(
    modifier = Modifier.fillMaxSize(),
    contentAlignment = Alignment.Center
) {
    Text(
        modifier = Modifier
            .onSizeChanged {
                it
            }
            .composed {
                Modifier.onSizeChanged {
                    it
                }
            }
            .remembered {
                Modifier.onSizeChanged {
                    it
                }
            },
        text = "Hello, $counter!",
        color = Color.Black
    )
  }
}

我尝试了composed,但是没有用。所以我创建了remembered函数:

@Composable
fun Modifier.remembered(modifier: () -> Modifier): Modifier {
    val rememberedModifier = remember {
        modifier()
    }
    return then(rememberedModifier)
}

相关问题