簡體   English   中英

如何知道當前是否正在渲染 Composable(Composable 不在 Lazy Composable 中)?

[英]How to know if a Composable is currently being rendered (the Composable is not inside a Lazy Composable)?

如果我的布局大到足以使屏幕垂直滾動,我怎么知道當前是否正在渲染(完全或部分)某個 Composable?


重要的是要強調在此布局中沒有使用Lazy Composable(如LazyColumn )。

您可以使用 Modifier.globallyPositioned{it.positionOnWindow} 查看 Composable 在屏幕上的位置,並將其與父 Composable 高度/寬度或屏幕高度/寬度進行比較。

@Composable
private fun MyComposable() {
    var parentSize by remember { mutableStateOf(IntSize.Zero) }
    var text by remember {
        mutableStateOf("")
    }

    Column(modifier = Modifier.fillMaxSize()) {
        Text(text = text)
        Column(modifier = Modifier
            .fillMaxSize()
            .verticalScroll(rememberScrollState())
            .onSizeChanged {
                parentSize = it
            }
        ) {
            Box(
                modifier = Modifier
                    .fillMaxWidth()
                    .height(800.dp)
                    .background(Color.Red)
            )
            Box(modifier = Modifier
                .fillMaxWidth()
                .height(200.dp)
                .background(Color.Yellow)
                .onGloballyPositioned {
                    text = "parentSize: $parentSize" +
                            "positionInParent: ${it.positionInParent()}\n" +
                            "positionInRoot: ${it.positionInRoot()}\n" +
                            "positionInWindow: ${it.positionInWindow()}\n"
                }
            )
        }
    }
}

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM