【问题标题】:How to separate ads View from Game View?如何将广告视图与游戏视图分开?
【发布时间】:2022-01-21 17:13:03
【问题描述】:

目前我在 libgdx 中有一个游戏,它在游戏布局顶部显示广告。 但是,您可以注意到,它隐藏了屏幕顶部显示乐谱的部分。

问题: 如何使广告显示在游戏视图/屏幕上方,使其不会重叠/隐藏游戏中的任何内容?我希望屏幕如下图所示。

当前代码:

import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;

import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;


import de.golfgl.gdxgamesvcs.GpgsClient;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdSize;
import com.google.android.gms.ads.AdView;


public class AndroidLauncher extends AndroidApplication {

    private RelativeLayout layout;
    private RelativeLayout.LayoutParams params;
    private AdView bannerAd;

    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
        //

        GpgsClient gpgsClient = new GpgsClient();
        gpgsClient.initialize(this, false);

        SpaceEscape game = new SpaceEscape(gpgsClient);
        //
        //initialize(game, config);

        View gameView = initializeForView(game,config);

        ////////// Define the layout
        layout = new RelativeLayout(this);
        layout.addView(gameView, ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);

        params = new RelativeLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);

        params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
        params.addRule(RelativeLayout.CENTER_IN_PARENT);

        bannerAd = new AdView(this);
        bannerAd.setAdUnitId("REDACTED");
        bannerAd.setAdSize(AdSize.BANNER);

        layout.addView(bannerAd, params);
        setContentView(layout);

        AdRequest ad = new AdRequest.Builder().build();
        bannerAd.loadAd(ad);

    }
}

【问题讨论】:

    标签: android android-layout libgdx admob


    【解决方案1】:

    为避免使用RelativeLayout 产生这种重叠效果,您可以使用RelativeLayout.ALIGN_PARENT_TOP 规则创建一个位于屏幕顶部的Ad Container(例如:RelativeLayout 容器)并在下方添加GameView使用 RelativeLayout.BELOW 规则的广告容器。最后将您的AdView 添加为上述Ad Container 的子级。

    以下是如何执行上述结构的示例:

    //define the layout
    layout = new RelativeLayout(this);
    
    //adView Container RelativeLayout
    RelativeLayout adContainerRL = new RelativeLayout(this);
    adContainerRL.setBackgroundColor(Color.BLACK);
    adContainerRL.setId(ViewCompat.generateViewId());
    RelativeLayout.LayoutParams adContainerParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    adContainerParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
    layout.addView(adContainerRL, adContainerParams);
    
    //adView
    AdView bannerAd = new AdView(this);
    bannerAd.setAdUnitId("ca-app-pub-3940256099942544/6300978111"); //this is a test ad unit id
    bannerAd.setAdSize(AdSize.BANNER);
    RelativeLayout.LayoutParams adViewParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    adViewParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
    adViewParams.addRule(RelativeLayout.CENTER_IN_PARENT);
    adContainerRL.addView(bannerAd, adViewParams);
    
    //gameView
    View gameView = initializeForView(game, config);
    RelativeLayout.LayoutParams gameViewParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    gameViewParams.addRule(RelativeLayout.BELOW, adContainerRL.getId());
    layout.addView(gameView, gameViewParams);
    
    //set the layout
    setContentView(layout);
    
    //load ad
    AdRequest ad = new AdRequest.Builder().build();
    bannerAd.loadAd(ad);
    

    【讨论】:

      【解决方案2】:

      是的,效果很好,

      layout = new RelativeLayout(this);
      
      //adView Container RelativeLayout
      RelativeLayout adContainerRL = new RelativeLayout(this);
      adContainerRL.setBackgroundColor(Color.BLACK);
      adContainerRL.setId(ViewCompat.generateViewId());
      RelativeLayout.LayoutParams adContainerParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
      adContainerParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
      layout.addView(adContainerRL, adContainerParams);
      
      //adView
      AdView bannerAd = new AdView(this);
      bannerAd.setAdUnitId("ca-app-pub-3940256099942544/6300978111"); //this is a test ad unit id
      bannerAd.setAdSize(AdSize.BANNER);
      RelativeLayout.LayoutParams adViewParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
      adViewParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
      adViewParams.addRule(RelativeLayout.CENTER_IN_PARENT);
      adContainerRL.addView(bannerAd, adViewParams);
      
      //gameView
      View gameView = initializeForView(game, config);
      RelativeLayout.LayoutParams gameViewParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
      gameViewParams.addRule(RelativeLayout.BELOW, adContainerRL.getId());
      layout.addView(gameView, gameViewParams);
      
      //set the layout
      setContentView(layout);
      
      //load ad
      AdRequest ad = new AdRequest.Builder().build();
      bannerAd.loadAd(ad);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-15
        • 1970-01-01
        • 2016-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多