广告在 android 应用中的位置

Position of ads on an android app

我有一款 libgdx 游戏,我成功地在其中投放了广告,但我遇到了一个问题

广告覆盖了屏幕的底部,我有一些重要的东西

我的问题是如何放置两个视图(gameView 和 adView)以使它们不相互重叠?

这是 AndroidLauncher class

public class AndroidLauncher extends AndroidApplication implements AdsController {

    protected AdView adView;

    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        RelativeLayout layout = new RelativeLayout(this);
        AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
        View gameView = initializeForView(new GameMain(this), config);
        layout.addView(gameView, ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT);

        adView = new AdView(this);
        adView.setAdSize(AdSize.SMART_BANNER);
        adView.setVisibility(View.INVISIBLE);
        adView.setBackgroundColor(0xff000000);
        adView.setAdUnitId("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");


        RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT
        );
        adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);

        layout.addView(adView, adParams);

        setContentView(layout);
    }

    @Override
    public void showBannerAd() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                adView.setVisibility(View.VISIBLE);
                AdRequest.Builder builder = new AdRequest.Builder();
                adView.loadAd(builder.build());
            }
        });
    }

    @Override
    public void hideBannerAd() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                adView.setVisibility(View.INVISIBLE);
            }
        });
    }

    @Override
    public boolean showAds() {
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo ni = cm.getActiveNetworkInfo();
        return (ni != null && ni.isConnected());
    }
}

这是 AdsController 界面

public interface AdsController {

    public void showBannerAd();
    public void hideBannerAd();
    public boolean showAds();

}

另外一件事,如果没有互联网连接(没有广告),我希望我的游戏能够全屏显示。

我该怎么做?

您的游戏视图需要将其设置在 AdView 之上的布局参数。因此,它需要 RelativeLayout.LayoutParams,而不仅仅是 ViewGroup.LayoutParams。使用这种布局,您可以通过将 AdView 的可见性设置为 GONE 而不是 INVISIBLE 来使游戏充满整个屏幕。因此,您可以在广告可用之前将其保留。

要相对于其他视图进行设置,您需要为其他视图提供一个 ID,您可以使用 View.generateViewId() 生成该 ID。

protected void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
        View gameView = initializeForView(new GameMain(this), config);

        adView = new AdView(this);
        adView.setAdSize(AdSize.SMART_BANNER);
        adView.setVisibility(View.GONE);
        adView.setBackgroundColor(0xff000000);
        adView.setAdUnitId("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

        int adViewId = View.generateViewId();
        adView.setId(adViewId);

        RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT
        );
        adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);

        RelativeLayout.LayoutParams gameParams = new RelativeLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT
        );
        gameParams.addRule(RelativeLayout.ABOVE, adViewId);

        RelativeLayout layout = new RelativeLayout(this);
        layout.addView(adView, adParams);
        layout.addView(gameView, gameParams);

        setContentView(layout);
    }