Android Jetpack Compose 打开街道地图与 tabrow 冲突

问题描述 投票:0回答:0

我正在尝试撰写,但出了点问题...... 我有带有两个选项卡(地图和监视器)的 TabScreen。选项卡监视器工作正常但选项卡地图工作错误。当我切换标签地图时,我的标签消失了,但我尝试点击放置标签,它的工作和切换。

TabScreen.kt

@Composable
fun TabScreen() {
    var tabIndex by remember { mutableStateOf(0) }

    val tabs = listOf("Map", "Monitors")

    Column(modifier = Modifier.fillMaxWidth()) {
        TabRow(
            selectedTabIndex = tabIndex,
            backgroundColor = Color.White,
            divider = {
                TabRowDefaults.Divider(
                    Modifier.wrapContentSize(Alignment.BottomStart),
                    color = Color(0xFFF4F4F4)
                )
            },
            indicator = { tabPositions: List<TabPosition> ->
                TabRowDefaults.Indicator(
                    Modifier.tabIndicatorOffset(tabPositions[tabIndex]),
                    color = Color.Yellow,
                    height = 4.dp
                )
            },
            contentColor = Color(0xFFC2C2C2)
        ) {
            tabs.forEachIndexed { index, title ->
                Tab(
                    text = { Text(title) },
                    selected = tabIndex == index,
                    onClick = { tabIndex = index },
                    selectedContentColor = Color.Black,
                    unselectedContentColor = Color(0xFFC2C2C2)
                )
            }
        } 
        
        when (tabIndex) {
            0 -> MapScreen()
            1 -> MonitorsScreen()
        }
    }
}

显示器屏幕工作正常:

MonitorsScreen

MapScreen.kt

@Composable
fun MapScreen() {
    Box() {
        val context = LocalContext.current

        val cameraState = rememberCameraState {
            geoPoint = GeoPoint(-6.3970066, 106.8224316)
            zoom = 12.0
        }

        var mapProperties by remember {
            mutableStateOf(DefaultMapProperties)
        }

        val overlayManagerState = rememberOverlayManagerState()

        SideEffect {
            mapProperties = mapProperties
                .copy(isTilesScaledToDpi = true)
                .copy(tileSources = TileSourceFactory.MAPNIK)
                .copy(isEnableRotationGesture = true)
                .copy(zoomButtonVisibility = ZoomButtonVisibility.NEVER)
        }

        OpenStreetMap(
//        modifier = Modifier.fillMaxSize(),
            cameraState = cameraState,
            properties = mapProperties,
            overlayManagerState = overlayManagerState,
            onFirstLoadListener = {
                val copyright = CopyrightOverlay(context)
                overlayManagerState.overlayManager.add(copyright)
            }
        )
    }
}

MapScreen

如果我触摸地图,部分标签显示:

MapScreen

我做错了什么?

我想要的结果: MapScreen

android kotlin dictionary android-jetpack-compose osmdroid
© www.soinside.com 2019 - 2024. All rights reserved.