首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >android get adMob条幅出现时的高度

android get adMob条幅出现时的高度
EN

Stack Overflow用户
提问于 2012-05-03 22:09:11
回答 5查看 15.6K关注 0票数 9

我正在成功地将adMob横幅添加到我的应用程序。当横幅出现时,我需要得到它的高度,以便调整所有布局元素的大小。我使用的是event onReceivedAd,它是正确触发的。但是,alturaBanner = 0。那么,如何获得它的高度呢?谢谢。

代码语言:javascript
复制
   /** Called when an ad is received. */
    @Override
    public void onReceiveAd(Ad ad) 
    {
        adView.setVisibility(View.VISIBLE);

        int alturaBanner = adView.getHeight();

        RelativeLayout.LayoutParams params1 = (android.widget.RelativeLayout.LayoutParams) browse2
        .getLayoutParams();

        params1.setMargins(0, alturaBanner, 0, 0);

      Log.d(LOG_TAG, "onReceiveAd");
      Toast.makeText(this, "onReceiveAd", Toast.LENGTH_SHORT).show();
    }
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-05-03 22:23:18

在准备好视图之前获取视图的高度将始终返回0。使用下面的代码来获得正确的大小,无论您使用的是哪种设备/屏幕:

代码语言:javascript
复制
private static void runJustBeforeBeingDrawn(final View view, final Runnable runnable)
{
    final ViewTreeObserver vto = view.getViewTreeObserver();
    final OnPreDrawListener preDrawListener = new OnPreDrawListener()
    {
        @Override
        public boolean onPreDraw()
        {
            runnable.run();
            final ViewTreeObserver vto = view.getViewTreeObserver();
            vto.removeOnPreDrawListener(this);
            return true;
        }
    };
    vto.addOnPreDrawListener(preDrawListener);
}

在给定的runnable中,您可以查询视图的实际大小。

或者,如果您愿意,可以使用addOnGlobalLayoutListener而不是addOnPreDrawListener。

另一种方法是使用onWindowFocusChanged (并检查hasFocus==true),但这并不总是最好的方法(仅用于简单的视图创建,不用于动态创建)

编辑:runJustBeforeBeingDrawn的替代方案:https://stackoverflow.com/a/28136027/878126

票数 6
EN

Stack Overflow用户

发布于 2015-12-01 14:37:25

您可以获取任何类型的横幅的高度,甚至在它被添加到布局之前。

代码语言:javascript
复制
int heightPixels = AdSize.SMART_BANNER.getHeightInPixels(this);

代码语言:javascript
复制
int heightPixels = AdSize.FULL_BANNER.getHeightInPixels(myContext);

或者是DIP的

代码语言:javascript
复制
int heightDP = AdSize.BANNER.getHeight();

因此,为了满足您的需要,您可以这样做:

代码语言:javascript
复制
/** Called when an ad is received. */
@Override
public void onReceiveAd(Ad ad) 
{
    adView.setVisibility(View.VISIBLE);

    int alturaBanner = AdSize.BANNER.getHeight(); // This gets the adsize, even if the view is not inflated. 

    RelativeLayout.LayoutParams params1 = (android.widget.RelativeLayout.LayoutParams) browse2
    .getLayoutParams();

    params1.setMargins(0, alturaBanner, 0, 0);

  Log.d(LOG_TAG, "onReceiveAd");
  Toast.makeText(this, "onReceiveAd", Toast.LENGTH_SHORT).show();
}

只需将AdSize.BANNER更改为AdSize.SMART_BANNER或您使用的任何标语类型即可。

Add Sizes Get Height

票数 25
EN

Stack Overflow用户

发布于 2013-10-04 17:48:14

我使用以下方法来获取AdView的高度:

代码语言:javascript
复制
adView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        int height = adView.getHeight();
        if (height > 0) {
            // now the height is gotten, you can do things you want
        }
    }
});

当视图树中的视图的全局布局状态或可见性发生变化时,会触发onGlobalLayout()。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10433140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档