当前位置: 首页 > 知识库问答 >
问题:

如何显示横幅广告在Jetpack撰写?

暨嘉
2023-03-14

我刚刚开始学习Jetpack Compose,它真的很好,UI是如此简化。我正在学习如何使用Jetpack组合实现所有XML视图,如RecyclerView(Lazycolumn)等。

我想知道如何在Jetpack Compose中显示AdMob横幅广告。我知道我们可以使用互操作性API使用经典的XML视图。

AndroidView(...) {
    ...
}

有没有一种组合方式来实现Admob?或者我只能使用 AndroidView 以编程方式创建横幅广告视图。

共有3个答案

东方智敏
2023-03-14

只是补充一下布伦德尔的回答。从Admob 21.0.0开始,您会收到以下错误:

Val不能被重新分配

因此

    adSize = AdSize.BANNER

使用

    setAdSize(AdSize.BANNER)

Blundell答案中的整个AndroidiView应该看起来像这样:

    AndroidView(
        modifier = modifier.fillMaxWidth(),
        factory = { context ->
            AdView(context).apply {
                setAdSize(AdSize.BANNER)
                adUnitId = context.getString(R.string.ad_id_banner)
                loadAd(AdRequest.Builder().build())
            }
        }
    )
墨财
2023-03-14

这里有一个替代方法。您可以在XML中使用< code>ComposeView并使其工作。

activity_main.xml

<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.screens.MainActivity">
    
    <androidx.compose.ui.platform.ComposeView
        android:id="@+id/composeView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toTopOf="@+id/adView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        app:adSize="BANNER"
        app:adUnitId="ca-app-pub-xxxxxxxxxxxxx/xxxxxxxxxx"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.kt

setContentView(R.layout.activity_main).apply {
    findViewById<ComposeView>(R.id.composeView).setContent {               
        MyAppTheme {
            Surface(modifier = Modifier.fillMaxSize()){
                MyApp()
            }
        }
    }
}
管翼
2023-03-14

您可以在撰写中显示横幅广告,如下所示:

@Composable
fun AdvertView(modifier: Modifier = Modifier) {
    val isInEditMode = LocalInspectionMode.current
    if (isInEditMode) {
        Text(
            modifier = modifier
                .fillMaxWidth()
                .background(Color.Red)
                .padding(horizontal = 2.dp, vertical = 6.dp),
            textAlign = TextAlign.Center,
            color = Color.White,
            text = "Advert Here",
        )
    } else {
        AndroidView(
            modifier = modifier.fillMaxWidth(),
            factory = { context ->
                AdView(context).apply {
                    adSize = AdSize.BANNER
                    adUnitId = context.getString(R.string.ad_id_banner)
                    loadAd(AdRequest.Builder().build())
                }
            }
        )
    }
}

@Preview(showBackground = true)
@Composable
fun AdvertPreview() {
    AdvertView()
}

(摘自我的博客:https://blog . blundellapps . co . uk/using-admob-banner-ads-in-a-compose-layout/)

 类似资料:
  • 横幅(Banner) 1. 确定SDK文件已经全部拷贝到工程文件的libs子目录下参考 2. 在需要添加Banner广告的Activity对应的布局文件中加入一个AdView[com.hubcloud.adhubsdk.AdView]控件来给样式定位 例如: <!-- view for AdHub Banner Ad --> <com.hubcloud.adhubsdk.AdView

  • 问题内容: 我正在开发一个android应用程序,我在每个活动的底部都嵌入了admob广告,并且在所有活动中都显示了admob广告,但是我想在所有活动中始终显示一个admob广告,该广告始终显示,而不会在切换期间破坏自身活动,如果有人知道该问题的解决方案,请帮助我,我有3个活动,并且我还尝试创建一个基类,并使用该基类扩展所有活动,并调用创建和加载广告的函数,但仍然同样的问题,我必须在每个活动类中调

  • 我正在尝试使用Burstly为Android创建横幅,但出现以下错误: java.lang.RuntimeException:无法获取提供程序com.greystripe.android.sdk。AdContentProvider:java.lang.ClassNotFoundException:com.greystripe.android.sdk。加载程序dalvik.system.PathCl

  • 我有一个应用程序,应该在调试模式下使用Facebook观众网络显示一些广告。但在发布模式下,即使相同的代码正在运行调试版本,也不会发生任何事情。在发布模式下(从Google playstore下载),它会在logcat中显示以下错误 错误:Interstival-'Interstival ad加载失败:ad请求中的显示格式与为此放置指定的显示格式不匹配。每个放置只能用于一种显示格式。您可以创建多个

  • 我在stackoverflow上找到了这段代码,它基本上只是Baner的代码。我的问题是,当我按下横幅时,如何在新标签中打开链接? 代码:

  • admob文档中写道: 广告单元ID是应用程序中显示广告的位置的唯一标识符。为应用程序将执行的每个活动创建一个广告单元。例如,如果你有一个包含两个活动的应用程序,每个活动都显示一个横幅,那么你需要两个广告单元,每个广告单元都有自己的ID。AdMob广告单元ID的格式为ca-app-pub-xxxxxxxxxx/nnnnnnnn。 举个例子: 我有一些活动将使用横幅广告。对于每个横幅,我肯定会使用不