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

如何在双列Grid布局的RecyclerView中加载AdMob自定义尺寸广告?

没问题,完全可以在2列Grid布局的RecyclerView里加载AdMob自定义尺寸广告,我来一步步给你拆解实现方法:

一、先明确可行性

AdMob的自定义尺寸广告完全支持在RecyclerView中加载,不管是Grid还是Linear布局都能适配,只要处理好item类型区分和布局占比就可以了。

二、具体实现步骤

1. 先在AdMob后台配置自定义尺寸广告单元

登录AdMob后台,创建一个新的广告单元时选择“自定义尺寸”,输入你需要的宽高(比如适配2列Grid的话,宽度可以设为屏幕宽度的一半,或者固定数值),保存后拿到专属的广告单元ID。

2. 修改RecyclerView的Adapter逻辑

因为要混合展示内容项和广告项,需要在Adapter里区分两种item类型:

// 定义item类型常量
private static final int TYPE_CONTENT = 0;
private static final int TYPE_AD = 1;

// 重写getItemViewType,判断当前位置是内容还是广告
@Override
public int getItemViewType(int position) {
    // 示例:每3个内容项插入1个广告(根据自己需求调整规则)
    return isAdPosition(position) ? TYPE_AD : TYPE_CONTENT;
}

// 自定义方法判断是否为广告位置
private boolean isAdPosition(int position) {
    // 注意索引从0开始,这里是第4、8、12...位显示广告
    return (position + 1) % 4 == 0;
}

3. 创建自定义尺寸的AdView布局

新建一个广告item的布局文件item_ad_custom.xml,给AdView设置自定义尺寸:

<com.google.android.gms.ads.AdView
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:id="@+id/adView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    ads:adSize="CUSTOM"
    ads:adUnitId="你的自定义广告单元ID"
    ads:adWidth="300" <!-- 替换成你在AdMob后台设置的宽度 -->
    ads:adHeight="250" /> <!-- 替换成你在AdMob后台设置的高度 -->

如果需要自适应宽度,可以把adWidth设为MATCH_PARENT,但高度必须和后台配置的自定义尺寸一致。

4. 在Adapter中绑定广告

在onCreateViewHolder里分别加载内容布局和广告布局,onBindViewHolder中加载广告请求:

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    if (viewType == TYPE_AD) {
        View adView = inflater.inflate(R.layout.item_ad_custom, parent, false);
        return new AdViewHolder(adView);
    } else {
        View contentView = inflater.inflate(R.layout.item_content, parent, false);
        return new ContentViewHolder(contentView);
    }
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    if (holder.getItemViewType() == TYPE_CONTENT) {
        // 绑定你的内容数据逻辑
        ContentViewHolder contentHolder = (ContentViewHolder) holder;
        // ...
    } else {
        AdViewHolder adHolder = (AdViewHolder) holder;
        // 加载广告请求
        AdRequest adRequest = new AdRequest.Builder().build();
        adHolder.adView.loadAd(adRequest);
    }
}

// 广告ViewHolder
static class AdViewHolder extends RecyclerView.ViewHolder {
    AdView adView;
    AdViewHolder(View itemView) {
        super(itemView);
        adView = itemView.findViewById(R.id.adView);
    }
}

// 内容ViewHolder(根据你的需求自定义)
static class ContentViewHolder extends RecyclerView.ViewHolder {
    // 你的内容控件
    ContentViewHolder(View itemView) {
        super(itemView);
        // ...
    }
}

5. 适配GridLayoutManager的列数

让广告item占满2列,需要给GridLayoutManager设置SpanSizeLookup:

GridLayoutManager layoutManager = new GridLayoutManager(this, 2);
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override
    public int getSpanSize(int position) {
        // 广告item占2列,内容item占1列
        return isAdPosition(position) ? 2 : 1;
    }
});
recyclerView.setLayoutManager(layoutManager);
三、注意事项
  • 自定义尺寸广告要符合AdMob规范,最小尺寸为宽250dp×高125dp,避免设置过小导致广告无法展示。
  • 测试阶段请使用AdMob提供的测试广告单元ID,不要用正式ID,避免触发政策限制。
  • 记得在Manifest中添加AdMob所需的权限和元数据,并且在App启动时初始化MobileAds:MobileAds.initialize(this);

内容的提问来源于stack exchange,提问作者Umar Farooq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:02:40