我一直在寻找关于如何在compose上显示本地广告的示例应用程序,但我找不到。有什么解决方案吗?
使用AndroidViewBinding
包装NativeAdView
。
// build.gradle.kts
dependencies {
implementation("androidx.compose.ui:ui-viewbinding:1.2.0-beta03")
}
创建包含NativeAdView的ViewBinding。
@Composable
fun NativeMediumAd() {
AndroidViewBinding(factory = LayoutNativeAdBinding::inflate) {
// Initialize NativeAdView
val adView = root.also { adView ->
adView.advertiserView = tvAdvertiser
adView.bodyView = tvBody
adView.callToActionView = btnCta
adView.headlineView = tvHeadline
adView.iconView = ivAppIcon
adView.priceView = tvPrice
adView.starRatingView = rtbStars
adView.storeView = tvStore
adView.mediaView = mvContent
}
// Request Ad
val adLoader = AdLoader.Builder(adView.context, "NATIVE_AD_KEY")
.forNativeAd { nativeAd ->
nativeAd.advertiser?.let { advertiser ->
tvAdvertiser.text = advertiser
}
nativeAd.body?.let { body ->
tvBody.text = body
}
nativeAd.callToAction?.let { cta ->
btnCta.text = cta
}
nativeAd.headline?.let { headline ->
tvHeadline.text = headline
}
nativeAd.icon?.let { icon ->
ivAppIcon.setImageDrawable(icon.drawable)
}
nativeAd.price?.let { price ->
tvPrice.text = price
}
nativeAd.starRating?.let { rating ->
rtbStars.rating = rating.toFloat()
}
nativeAd.store?.let { store ->
tvStore.text = store
}
adView.setNativeAd(nativeAd)
})
.withNativeAdOptions(NativeAdOptions.Builder().build())
.build()
adLoader.loadAd(AdRequest.Builder().build())
}
}
完整源代码:
- layout_native_ad.xml
- NativeAd.kt
- 用法
您应该使用AndroidView
包装AdMobAdView
来自文档:
若要包含视图元素或层次结构,请使用
AndroidView
可组合。AndroidView
被传递了一个返回View的lambda。AndroidView
还提供了一个更新回调,该回调在视图膨胀时调用。每当回调中读取的State
发生变化时,AndroidView
就会重新组合。
AndroidView(
factory = { context: Context ->
AdView(context).apply {
// config AdView
}
},
update = { adview ->
}
)