【问题标题】:android admob resize on landscapeandroid admob在横向上调整大小
【发布时间】:2012-07-01 11:28:10
【问题描述】:

我已经在清单上声明了 adMob,比如

<activity 
           android:name="com.google.ads.AdActivity"
          android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
          />

它在设备旋转时正确调整大小,但现在我必须将 android:configChanges="keyboardHidden|orientation" 添加到包含 adMob 的活动中,以防止重新加载活动。我达到了它,但现在 adMob 在横向时没有缩放。 onConfigChanges 事件我现在可以强制使用适当的横向尺寸调整 adMob 的大小。如何?谢谢。

@Override
    public void onConfigurationChanged(Configuration newConfig) {
      super.onConfigurationChanged(newConfig);
    }

【问题讨论】:

标签: java android eclipse


【解决方案1】:

我遇到了同样的问题,但找到了解决方法。

我的 AdView 位于页面底部,在相对布局内。加载时它看起来是正确的,所以我认为LayoutParams 是正确的。为了解决这个问题,我必须从 RelativeLayout 中删除所有内容,创建一个新的 AdView,然后以正确的顺序将其全部添加回原来的 LayoutParams

类似:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    AdView adView = (AdView)findViewById(R.id.adView);
    View contentFrame = findViewById(R.id.contentFrameLayout);

    RelativeLayout parent = (RelativeLayout) adView.getParent();
    LayoutParams mapFrameParams = contentFrame.getLayoutParams();
    LayoutParams adViewParams = adView.getLayoutParams();

    parent.removeView(adView);
    parent.removeView(contentFrame);

    AdView newAdView = new AdView(this, AdSize.SMART_BANNER, getString(R.string.admob_pubId));

    newAdView.setId(R.id.adView);

    parent.addView(newAdView, adViewParams);
    parent.addView(contentFrame,mapFrameParams);
    newAdView.loadAd(new AdRequest());
}

这对我有用,但仍然感觉像一个 hack。

【讨论】:

  • 以防万一有人需要 api 级别
  • 在创建新的 adView 之前调用 adView.destroy() 将释放宝贵的资源。
  • @user1951805 这是多余的,但在这个答案的时候,它是相关的。自从这篇文章以来我没有重新讨论过这个问题,所以我不知道是否仍然需要这种解决方法。
  • 贾斯汀史密斯,这个解决方法仍然需要。我正在使用它减去删除和添加 contentFrame。
  • 将 AdView 创建更新为 stackoverflow.com/a/29516024/1816603 中的当前 AdMob 的 SDK
【解决方案2】:

没有足够的代表直接回复,但你是正确的贾斯汀史密斯。正如 Eric Leichtenschlag 在这里https://groups.google.com/forum/#!msg/google-admob-ads-sdk/8Ch7VmAm7RE/34Tdw6Zz4jAJ 所说,如果您使用 SMART_BANNER,则需要重新创建 AdView

我所做的是从布局中删除 adView,销毁 adview,重新创建它,将其重新添加到布局中,然后发出 AdRequest。

【讨论】:

  • 感谢来源,我想我还没有看到。
【解决方案3】:

试试这个设置:

<com.google.ads.AdView
    android:id="@+id/adView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    ads:adSize="SMART_BANNER"
    ads:adUnitId="@string/adkey"
    ads:loadAdOnCreate="false"
    android:focusable="false" />

SMART_BANNER 会自动为您的广告选择最佳尺寸和类型。

在您的onConfigurationChanged 方法中,您只需为AdView 请求一个新广告。

请注意,您可能需要添加xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"

【讨论】:

  • 使用您的建议进行设备旋转时再次正确请求横幅但尺寸保持不变
  • 我有同样的问题,当使用您的建议进行设备旋转时再次正确请求横幅但尺寸保持不变,您解决了这个问题吗?
  • 我认为 adView 在添加到布局时计算它的大小,而不是在它收到广告时计算它的大小(但是这会很好),所以我认为这一定是为什么这不起作用.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多