android - Kotlin Compose 全局页脚 View

标签 android kotlin android-jetpack-compose

我正在尝试在底部显示全局显示的广告横幅。这意味着当我浏览整个应用程序时,我想停留在那里。 到目前为止,我已经尝试在 Column 中添加 NavHostAdView,希望链接页面的导航将只占用剩余的内容空间和底部 View 将保留在那里。但是,NavHost 占据整个屏幕,而 AdView 的高度为零。当我导航第二个 View 时,AdView 仍然位于 View 层次结构内,但高度仍然为零。

我尝试过更改各种设置,将 .weight(1f) 添加到广告 View 、更改列排列、.fillMaxSize() .fillMaxHeight().minHeight()、固定高度等

我可能需要研究不同的布局来实现此结果,但不确定在哪个方向搜索。该广告效果很好,我尝试在没有该列的情况下显示,并正确显示在屏幕中央。

我尝试过的另一个变体是在没有列的情况下显示它,向 NavHost 添加底部间距,然后以某种方式将 AdView 定位到底部。对于这个变体,我无法将其定位到底部。

如有任何帮助,我们将不胜感激!

Column() {
                val navController = rememberNavController()
                NavHost(
                    navController = navController,
                    startDestination = NavigationRoutes.Home
                ) {
                    composable(NavigationRoutes.Home) { HomeView(navController = navController) }
                    composable(
                        NavigationRoutes.Books,
                        arguments = listOf(navArgument("mode") { type = NavType.IntType })
                    ) { backStackEntry ->
                        val rawMode = backStackEntry.arguments?.getInt("mode") ?: 0
                        var mode: ContentMode = if (rawMode == 0) {
                            ContentMode.READING
                        } else {
                            ContentMode.QUIZ
                        }
                        BooksView(navController = navController, mode = mode)
                    }
                }
                AndroidView(
                    modifier = Modifier
                        .fillMaxWidth()
                        .height(IntrinsicSize.Max)
                        .weight(1f),
                    factory = { context ->
                        AdView(context).apply {
                            setAdSize(AdSize.BANNER)
                            adUnitId = AdIdentifiers.GlobalBanner.adID
                            loadAd(AdRequest.Builder().build())
                        }
                    }
                )
            }

最佳答案

这可能是具有 Modifier.fillmaxSize() 的 NavHost 的任何子可组合项的问题。您可以为 NavHost 设置一个修饰符,让您定义它将覆盖多少空间

Column(modifier = Modifier.fillMaxSize()){

   NavHost(modifier = Modifier.fillmaxWidth).weight(1f){}
   AdView(modifier = Modifier
                        .fillMaxWidth()
                        .height(IntrinsicSize.Max)
   )
           
}

关于android - Kotlin Compose 全局页脚 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72944989/

相关文章:

android - 如何在 Android 手机上打开 Expo 项目?

android - 如果一次被多次调用,如何避免多次显示对话框?

int - Kotlin 编译错误 : None of the following functions can be called with the arguments supplied

android - java.lang.IllegalArgumentException : Navigation destination that matches request NavDeepLinkRequest 异常

java - 将 Intent 调用放在单独的类中

android - 可以过滤 WifiManager 的扫描吗?

java - 如何检测用户是否拖动 PIP 窗口(向下拖动以关闭)?

android - 启动画面错误 : android. content.res.Resources$NotFoundException: Drawable

android - 带有 Tabs 的 TopAppBar 呈现颜色不正确的 Tabs

android - Jetpack Compose BottomNavBar 吗?如何使用 bottomNavbar 任何示例?