Android Compose 如何获取位置和大小。

    Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
                GetPositionAndSizeExample()
            }
package com.example.test_new_virsion

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.boundsInParent
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp

@Composable
fun GetPositionAndSizeExample() {
    val boxRect = remember { mutableStateOf(Rect.Zero) }

    Box(
        modifier = Modifier
            .size(100.dp)
            .background(Color.Blue)
            .onGloballyPositioned { coordinates ->
                boxRect.value = coordinates.boundsInParent()
            },

        ) {
        Text(text = "Left: ${boxRect.value.left} Top: ${boxRect.value.top} Right: ${boxRect.value.right} Bottom: ${boxRect.value.bottom}")
    }


    // 这里可以使用 boxRect.value 获取到Box组件的位置和大小信息
    // boxRect.value.left - 左侧位置
    // boxRect.value.top - 顶部位置
    // boxRect.value.right - 右侧位置
    // boxRect.value.bottom - 底部位置
    // boxRect.value.width - 宽度
    // boxRect.value.height - 高度
}

@Preview(showBackground = true)
@Composable
fun GetPositionAndSizeExamplePreview() {
    MaterialTheme {
        GetPositionAndSizeExample()
    }
}

  boxRect.value = coordinates.boundsInParent() 是针对当前父布局。如果想针对整个手机可以用

            val position = coordinates.positionInWindow()
                                val top =  position.y-StatusBarUtil.getStatusBarHeight(context)
                                viewModel.boxRect.value = Rect(
                                    left = position.x,
                                    top = top,
                                    right = position.x + coordinates.size.width,
                                    bottom = top + coordinates.size.height
                                )
                                LL.e(
                                    TAG,
                                    " \"Left: ${viewModel.boxRect.value.left} Top: ${viewModel.boxRect.value.top} Right: ${viewModel.boxRect.value.right} Bottom: ${viewModel.boxRect.value.bottom}\""
                                )
    //获取状态栏高度
    fun getStatusBarHeight(context: Context): Int {
        var result: Int = 0
        val resourceId: Int = context.getResources().getIdentifier(
            "status_bar_height", "dimen", "android"
        )
        if (resourceId > 0) {
            result = context.getResources().getDimensionPixelSize(resourceId)
        }
        return result
    }

文章来源地址https://uudwc.com/A/R6gX6

原文地址:https://blog.csdn.net/mp624183768/article/details/130371504

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年09月26日 13:04
【从0学习Solidity】 54. 跨链桥
下一篇 2023年09月26日 13:04