【问题标题】:Center MoPub baner on SurfaceViewSurfaceView 上的中心 MoPub 横幅
【发布时间】:2011-10-02 05:36:39
【问题描述】:

我想在我的 Android 游戏中添加 MoPub 广告。游戏是在 SurfaceView 类上创建的。我没有 xml 布局文件。问题是我无法在屏幕上居中显示广告。我尝试一切重心和重心。还是不行。 MoPubView 扩展了 FrameLayout。

    MoPubView mAdView = new MoPubView(this);
    mAdView.setAdUnitId("_MY__ID_"); 
    mAdView.loadAd();

    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

    layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);

    RelativeLayout mRelativeLayout = new RelativeLayout(this);

    mRelativeLayout.setGravity(Gravity.CENTER_HORIZONTAL);
    mRelativeLayout.addView(mSurface);
    mRelativeLayout.addView(mAdView, layoutParams);

    mRelativeLayout.invalidate();
    setContentView(mRelativeLayout);

请给我一些建议,因为它让我发疯。我觉得我错过了一些简单的东西。

【问题讨论】:

    标签: android layout surfaceview mopub


    【解决方案1】:

    您不能直接在 MoPub 中将内容居中,或者至少我还没有找到这样做的方法。它基于 FrameLayout。

    您必须使广告以 HTML 居中。如果您在 MoPub 广告系列中使用自定义 HTML 代码,只需将代码包装在 <div style="text-align:center">...</div> 中即可。 (通过 MoPub 管理网站执行此操作)。它解决了我的问题,我使用的是 OpenX 广告提供商。

    【讨论】:

      【解决方案2】:

      我知道设置恒定的横幅宽度不是一个好主意,但只要你的横幅为 320 像素,它就可以正常工作:

      final float scale = getResources().getDisplayMetrics().density;
      
      MoPubView mAdView = new MoPubView(this);
      mAdView.setAdUnitId(MOPUB_ID); 
      mAdView.loadAd();
      
      RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams((int) (320*scale), LayoutParams.WRAP_CONTENT);
      
      layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
      
      RelativeLayout mRelativeLayout = new RelativeLayout(this);
      
      mRelativeLayout.addView(mSurface);
      mRelativeLayout.addView(mAdView, layoutParams);
      
      mRelativeLayout.invalidate();
      setContentView(mRelativeLayout);
      

      【讨论】:

      • 使用密度作为比例的奖励积分。在比例因子为 1.5 的某些设备上产生巨大差异
      【解决方案3】:

      只需使用“FILL_PARENT”参数创建一个容器布局,然后将您的广告视图添加到其中,如下所示:

      MoPubView mAdView = new MoPubView(this);
      mAdView.setAdUnitId(XXXXXXX);
      
      RelativeLayout adContainer = new RelativeLayout(this);
      addContentView(adContainer, new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
      
      LayoutParams adParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
      adParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, 1); //to align vertically at top
      adParams.addRule(RelativeLayout.CENTER_IN_PARENT, 1); //to align horizontally at center
      
      adContainer.addView(mAdView, adParams);
      mAdView.loadAd();
      

      【讨论】:

        【解决方案4】:

        我用下面的代码 sn-p 做了同样的事情。我正在使用 LibGDX java 游戏引擎。

        Relativelayout layout = new RelativeLayout(this);
        RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
                                        RelativeLayout.LayoutParams.WRAP_CONTENT);
                        adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
                        adParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
        
                        moPubView = new MoPubView(mActivity.getApplicationContext());
                        moPubView.setAdUnitId("XXXXXX");// Banner test Ad unit Id.
                        moPubView.setAutorefreshEnabled(true);
                        moPubView.setVisibility(View.GONE);
                        layout.addView(moPubView,adParams);
        

        1.我在父级中有相对布局。

        2.在父相对布局中添加了MoPubView,只有layoutParams ALIGN_PARENT_BOTTOM && CENTER_HORIZONTAL

        layout.addView(moPubView,adParams);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-02-26
          • 1970-01-01
          • 2021-07-07
          • 1970-01-01
          • 2016-01-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多