Di Compose, bagaimana kita mendapatkan posisi atau ukuran Composable di layar ? Misalnya, saya mencoba memfokuskan kamera peta antara batas tertentu dan menambahkan padding. Di sini saya perlu mendapatkan padding yang sesuai dengan posisi atas pager dan posisi bawah TopBar.

enter image description here

Saat ini kode layar ini adalah sebagai berikut:

BoxWithConstraints {
        MapViewWithMarkers(...)
        TopAppBar(
            modifier = Modifier
                .fillMaxWidth()
                .statusBarsPadding(),
            backgroundColor = Color.Transparent,
            elevation = 0.dp,
        )
        HorizontalPager(
            state = pagerState,
            modifier = Modifier
                .align(Alignment.BottomCenter)
                .fillMaxWidth()
                .navigationBarsPadding()
                .padding(bottom = 32.dp),
            itemSpacing = 8.dp,
        ) { page ->
            val hikeOnMapCard = hikeMarkerList[page]
            HikeOnMapCard(hikeOnMapCard) {
                viewModel.hikeOnMapCardClicked(hikeOnMapCard.id)
            }
        }
    }

Saya ingin meneruskan ke MapViewWithMarkers Composable padding yang sesuai dengan ukuran TopAppBar dan ukuran Pager di layar ini

Terima kasih!

0
Guimareshh 12 Mei 2021, 14:32

1 menjawab

Jawaban Terbaik

Untuk mendapatkan posisi dan ukuran composable Anda dapat menggunakan onGloballyPositioned pengubah.

Sesuatu seperti:

 var sizeTopBar by remember { mutableStateOf(IntSize.Zero) }

 TopAppBar(
        modifier = Modifier
          .onGloballyPositioned { coordinates ->
             sizeTopBar = coordinates.size,
          }
       //...
 )

Dengan tata letak yang rumit untuk mengukur dan tata letak beberapa komponen, gunakan Layout dapat dikomposisi sebagai gantinya. Komposisi ini memungkinkan Anda untuk mengukur dan meletakkan anak-anak secara manual.

1
Gabriele Mariotti 12 Mei 2021, 11:59