You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于在Google Ad Manager中实现自适应横幅广告的技术咨询

在Google Ad Manager中实现自适应横幅广告的技术咨询

嘿,我看你正在尝试用Google Ad Manager做自适应横幅广告,还参考了官方的固定横幅示例代码,咱们一步步来捋清楚怎么调整和完善哈~

你贴的这段代码已经找对了方向——用到了getCurrentOrientationAnchoredAdaptiveBannerAdSize这个适配方法,但还缺一些关键环节,我给你补全完整的实现流程:

1. 先确认依赖配置

首先得保证你的app级build.gradle里已经添加了Google Ad Manager的最新依赖:

dependencies {
    implementation 'com.google.android.gms:play-services-ads:22.6.0' // 建议用官方最新版本号
}

2. 完善自适应横幅的代码逻辑

你现有的代码只是初始化了AdView,但还需要把它添加到布局容器、发起广告请求,还要处理屏幕旋转的情况(毕竟自适应横幅是和当前屏幕方向绑定的)。完整的示例代码可以参考下面:

class MainActivity : AppCompatActivity() {
    private lateinit var adView: AdManagerAdView
    private val AD_UNIT_ID = "你的广告单元ID" // 替换成你自己的ID

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 初始化自适应横幅AdView
        adView = AdManagerAdView(this).apply {
            adUnitId = AD_UNIT_ID
            // 这里传入的是屏幕宽度(转成dp),你也可以指定固定的最大宽度(比如360dp)
            val maxWidthDp = resources.displayMetrics.widthPixels / resources.displayMetrics.density
            val adaptiveAdSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(
                this@MainActivity,
                maxWidthDp
            )
            setAdSize(adaptiveAdSize)
        }

        // 将AdView添加到布局容器中(假设你布局里有个id为ad_container的FrameLayout)
        val adContainer = findViewById<FrameLayout>(R.id.ad_container)
        adContainer.addView(adView)

        // 发起广告请求
        val adRequest = AdManagerAdRequest.Builder().build()
        adView.loadAd(adRequest)
    }

    // 处理屏幕旋转:重新创建适配新方向的横幅
    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)
        // 先销毁旧的AdView释放资源
        adView.destroy()
        // 重新初始化并加载广告
        adView = AdManagerAdView(this).apply {
            adUnitId = AD_UNIT_ID
            val maxWidthDp = resources.displayMetrics.widthPixels / resources.displayMetrics.density
            val adaptiveAdSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(
                this@MainActivity,
                maxWidthDp
            )
            setAdSize(adaptiveAdSize)
        }
        val adContainer = findViewById<FrameLayout>(R.id.ad_container)
        adContainer.removeAllViews()
        adContainer.addView(adView)
        adView.loadAd(AdManagerAdRequest.Builder().build())
    }

    // 页面销毁时释放AdView资源
    override fun onDestroy() {
        super.onDestroy()
        adView.destroy()
    }
}

3. 布局文件的注意事项

你的布局里需要一个容器来承载AdView,推荐用FrameLayout,不要给容器设置固定高度,因为自适应横幅的高度会根据广告内容自动调整:

<FrameLayout
    android:id="@+id/ad_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"/>

几个关键知识点提醒

  • getCurrentOrientationAnchoredAdaptiveBannerAdSize方法会根据当前屏幕方向和你传入的最大宽度,返回符合规范的自适应横幅尺寸,这是实现自适应的核心。
  • 屏幕旋转时必须重新创建AdView并设置新尺寸,否则广告可能会出现拉伸、显示不全的问题。
  • 一定要在Activity销毁时调用adView.destroy(),避免内存泄漏。

如果后续遇到广告加载失败、显示异常的情况,可以把Logcat里的错误信息贴出来,我再帮你排查具体问题~

备注:内容来源于stack exchange,提问作者Tom11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 17:40:28