Admob Native Advanced Ad не показывает медиа-контент?
Я получил объявление, и все содержимое, кроме mediaView, похоже, работает. Чего не хватает?
class NativeAdAdapterItem(
private val ad: NativeAd,
) : AdapterItem<NativeAdAdapterItem.ViewHolder>(ad) {
override fun bind(firstTime: Boolean, holder: ViewHolder) = holder.bind(ad)
override fun getLayoutId() = R.layout.native_ad_item
override fun equals(other: Any?): Boolean = other as? InviteFriendsAdapterItem != null
class ViewHolder(itemView: View) : RecyclerAdapterViewHolder(itemView) {
private val binding = NativeAdItemBinding.bind(itemView)
fun bind(ad: NativeAd) {
binding.adHeadline.text = ad.headline
binding.adMedia.setMediaContent(ad.mediaContent)
binding.adMedia.setImageScaleType(ImageView.ScaleType.CENTER_CROP)
binding.adAdvertiser.text = ad.advertiser
binding.adIcon.setImageDrawable(ad.icon.drawable)
binding.adCallToAction.text = ad.callToAction
binding.adBody.text = ad.body
binding.adView.setNativeAd(ad)
}
}
}
Я сделал фоновый цвет MediaView зеленым, чтобы убедиться, что он виден на экране.
AdView добавляется в collectionView
1 ответ
Я также столкнулся с той же проблемой, теперь я решил эту проблему, просто создав макет XML, в котором вы установили свое представление следующим образом.
native_ad_view.xml
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.gms.ads.nativead.NativeAdView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/nativeAdsview"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.gms.ads.nativead.MediaView
android:id="@+id/ad_icon"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_margin="10dp"
app:layout_constraintEnd_toStartOf="@id/ad_headline"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
<TextView
android:id="@+id/ad_attribution"
android:layout_width="20dp"
android:layout_height="13dp"
android:text="AD"
android:textSize="8sp"
android:gravity="center"
android:background="#ffae00"
android:textColor="#ffffff"
android:layout_marginStart="10dp"
app:layout_constraintTop_toTopOf="@id/ad_icon"
app:layout_constraintStart_toEndOf="@id/ad_icon"
/>
<TextView
android:id="@+id/ad_headline"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:fontFamily="sans-serif"
android:maxLines="1"
android:textColor="#202020"
android:textSize="12sp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/ad_body"
app:layout_constraintEnd_toStartOf="@+id/ad_call_to_action"
app:layout_constraintStart_toEndOf="@id/ad_icon"
app:layout_constraintTop_toBottomOf="@id/ad_attribution"
tools:text="foodpanda -Grocery Delivery" />
<TextView
android:id="@+id/ad_body"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="10dp"
android:layout_marginTop="5dp"
android:maxLines="3"
android:text="Our app is crammed with the greatest food"
android:textColor="#9b9b9b"
android:textSize="11sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/ad_icon"
app:layout_constraintTop_toBottomOf="@id/ad_headline" />
<TextView
android:id="@+id/ad_call_to_action"
android:layout_width="wrap_content"
android:layout_height="38dp"
android:layout_marginEnd="8dp"
android:background="@drawable/bg_dialog"
android:backgroundTint="@color/status_bar_clr"
android:gravity="center"
android:layout_marginTop="3dp"
android:minWidth="60dp"
android:text="OPEN"
android:textColor="#f3fefe"
android:textSize="12dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/ad_headline"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.gms.ads.nativead.NativeAdView>
затем получить представление
val adView = layoutInflater.inflate(adLayout, null) as NativeAdView
val adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
.forNativeAd { ad: NativeAd ->
// Show the ad.
val adView = layoutInflater.inflate(adLayout, null) as NativeAdView
val adHeadline = adView.findViewById<TextView>(R.id.ad_headline)
val adIV = adView.findViewById<MediaView>(R.id.ad_icon)
adView.findViewById<TextView>(R.id.ad_body).text = ad.body
ad.mediaContent?.let { adIV.setMediaContent(it)}
adIV.setImageScaleType(ImageView.ScaleType.CENTER_CROP)
adView.setOnHierarchyChangeListener(object : ViewGroup.OnHierarchyChangeListener {
override fun onChildViewRemoved(p0: View?, p1: View?) = Unit
override fun onChildViewAdded(parent: View?, child: View?) {
if (child is ImageView) {
child.adjustViewBounds = true
child.scaleType = ImageView.ScaleType.CENTER_CROP
}
}
})
adView.mediaView =adView.ad_icon
adHeadline.text = ad.headline
val adsButton = adView.findViewById<TextView>(R.id.ad_call_to_action)
adsButton.text = ad.callToAction
val nativeAdView = adView.findViewById<NativeAdView>(R.id.nativeAdsview)
nativeAdView.callToActionView = adsButton
nativeAdView.callToActionView = adHeadline
nativeAdView.callToActionView = adIV
nativeAdView.setNativeAd(ad)
frameLayout.addView(adView)
}
.withAdListener(object : AdListener() {
override fun onAdFailedToLoad(adError: LoadAdError) {
// Handle the failure by logging, altering the UI, and so on.
}
override fun onAdOpened() {
super.onAdOpened()
adLoader?.loadAd(adRequest)
}
})
.withNativeAdOptions(
NativeAdOptions.Builder()
// Methods in the NativeAdOptions.Builder class can be
// used here to specify individual options settings.
.build()
)
.build()
adLoader?.loadAd(AdRequest.Builder().build())
Я надеюсь, что это поможет вам. если вы найдете это полезным, проголосуйте за меня.