15

我正在尝试设置 AdMob 横幅广告以匹配其父宽度。

我试过作为样本:

<com.google.ads.AdView
        android:id="@+id/ad"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center"
        ads:adSize="BANNER"
        ads:adUnitId="app-pub-id"
        ads:loadAdOnCreate="true"/>

并得到:

在此处输入图像描述

我也尝试过:

ads:adSize="SMART_BANNER"

在 IDE xml 预览中,我得到:

在此处输入图像描述

但实际上广告与他的父级宽度不匹配。

任何人?

4

4 回答 4

33

通过 XML 设置 AdMob 横幅以匹配其父级的正确方法是:

<com.google.ads.AdView
        android:id="@+id/ad"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        ads:adSize="SMART_BANNER"
        ads:adUnitId="ca-app-pub_id"
        ads:loadAdOnCreate="true"/>

此外,如前所述,匹配父级的能力取决于广告商。

如果广告商提供了相关资源,则广告将延伸以匹配其父级。

例如 Nexus 4 上的全尺寸广告:

在此处输入图像描述

于 2013-09-03T15:21:29.550 回答
4
adView.setAdSize(AdSize.SMART_BANNER);
于 2016-01-03T13:30:21.977 回答
1

如果您查看Admob 横幅尺寸列表,您会发现,由于您将高度设置为 50 dp,您将获得 320 dp x 50 dp 的横幅。根据您正在查看的设备将无法填充广告位的宽度(例如 Nexus 7)。AdMob 智能横幅的行为有所不同,它通过调整其大小来更好地响应不同的 Android 配置。

广告尺寸的限制允许广告商允许相同的广告创意在多个平台上运行而无需更改。

查看适用于 Android 的横幅广告上的 AdMob 文档,了解其建议的布局 XML。

于 2013-09-03T00:58:52.160 回答
0

这个技巧对我有用。

  1. 将您的 AdView 放置在某个布局中

布局.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/container"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical">

   <!-- Don't create AdView now. Programatically set AdView -->

</LinearLayout>
  1. 在您的活动或片段上访问 AdView 的父布局(即此处的线性布局)并添加 addOnGlobalLayoutListener
LinearLayout layout = findViewById(R.id.container);
layout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
     @Override
     public void onGlobalLayout() {

        // load your ad here 
        AdView adView = new AdView(context);
        adView.setAdUnitId("YOUR_AD_UNIT");

        // create custom banner size with same aspect ratio as type banner
        DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
        int targetAdWidth = (int) (layout.getWidth() / displayMetrics.density);
        int targetAdHeight = targetAdWidth * 50 / 320;

        AdSize adSize = new AdSize(targetAdWidth, targetAdHeight);
        adView.setAdSize(adSize);

        layout.addView(adView);

        AdRequest.Builder adReq = new AdRequest.Builder();
        AdRequest adRequest = adReq.build();
        // add listener if required
        adView.setAdListener(adListener);
        adView.loadAd(adRequest);
        layout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
      }
});
于 2019-07-26T09:24:17.380 回答