我正在尝试设置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预览中,我得到了:
但实际上广告与其父宽度不符。
任何?
答案 0 :(得分:31)
通过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上的完整尺寸广告:
答案 1 :(得分:4)
6
答案 2 :(得分:1)
如果查看Admob Banner Sizes列表,您会看到,因为您设置了50 dp的高度,您将获得320 dp x 50 dp横幅。根据您正在查看的设备,将无法填充广告位的宽度(例如Nexus 7)。 AdMob Smart Banners的行为有所不同,因为它通过调整大小来响应不同的Android配置。
广告尺寸的限制允许广告客户允许相同的广告素材在多个平台上无需更改即可投放。
检查AdMob Documentation on Banners for Android的建议布局XML。
答案 3 :(得分:0)
- 将AdView放置在某些布局中
<?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>
- 关于活动或片段,请访问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);
}
});