2

我决定在我的应用中添加一个带有 AdMob 的 SMARTBANNER。正如文档中所述: Android 上的智能横幅尺寸 ,纵向,我保留了 50 dp 的高度。所以我只是为它保留了一个空的线性布局,它在过去的应用程序中对我有用:

<LinearLayout
    android:id="@+id/layoutAd"
    android:layout_width="fill_parent"
    android:layout_height="50dp"
    android:orientation="vertical" />

然后使用方法:

   private void createAdView() {
        if (C.AD_ON) {
            ad_view = new AdView(this, AdSize.SMART_BANNER, C.AD_APPLICATION_ID);
            LinearLayout l = (LinearLayout) findViewById (R.id.layoutAd);
            l.addView (ad_view);
            AdRequest a = new AdRequest();
            ad_view.loadAd(a);
        }
    }

现在,虽然通常这种简单的方法有效,但在这种情况下我得到一个错误:

Not enough space to show ad! Wants: <480, 90>, Has: <480, 50>

???480x90?480x50?我在上表中找不到任何这些尺寸......它们来自哪里?无论如何,广告没有显示。

然后我尝试保留 90dp 而不是 50dp,并且广告正确显示,留下一个空的空间……猜猜看……大约 40dp。

在这一点上,我想到了一个问题:以前,在我以前的应用程序中,一切都在手机上运行。我认为一切都在适应不同的屏幕尺寸和密度。现在我很害怕实际上我的许多广告无法展示,因为广告预期的是 90dp 而不是 50dp 或其他任何数字。

实际上,我决定放置 SMARTBANNER 的唯一原因是我认为可以摆脱这类问题!

现在......我应该怎么做才能在每个可能的屏幕上正常工作,并合理地确保它不会在某些密度或某些尺寸上失败?我应该自己检测正在运行的设备,然后以编程方式保留 50、90 或 55 dp?这对我来说听起来很荒谬!

是不是有一些适用于横幅的“WRAP_CONTENT”这样的功能,这样我就不必手动指定 90 或 50 像素,而只期望显示正确的横幅和适应它的布局?

谢谢你。

4

2 回答 2

4

如果您想使用固定高度(而不是使用推荐的 WRAP_CONTENT),您将不得不为每个屏幕尺寸提供尺寸。我使用以下维度,但请注意,如果智能横幅的实施发生变化,这些维度可能会发生变化。

/values/dimens
<dimen name="ad_min_height">50dp</dimen>

/values-land/dimens
<dimen name="ad_min_height">32dp</dimen>

/values-large-land-v11/dimens
<dimen name="ad_min_height">90dp</dimen>

/values-large-v11/dimens
<dimen name="ad_min_height">90dp</dimen>
于 2013-02-22T00:10:09.823 回答
3

你真的尝试过WRAP_CONTENT智能layout_height横幅吗?这就是解决方案和推荐的做法。

于 2013-02-22T00:00:15.153 回答