如何在横向模式下显示垂直admob广告(使用libgdx)?

时间:2014-11-22 17:47:55

标签: android libgdx admob landscape

我想要这样的另外两个问题:
Android AdMob Vertical ads
How to show admob ads vertical in landscape mode? (Android)

我从这开始: https://github.com/TheInvader360/tutorial-libgdx-google-ads

我努力将左侧垂直横幅放在横向模式上,但我只能在屏幕中心获得垂直方向,我无法将其向左移动。

此外,我在两个不同的"图层" :横幅重叠应用视图中进行此操作。我想要这个,因为我需要全屏应用视图。

另一点:我需要暂停并恢复应用以显示横幅,似乎" layout.bringChildToFront"在加载广告之前调用,因此无效。

AndroidManifest.xml 我没什么特别的,我试图用代码来做)

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

这是我的代码 :(我使用的是LIBGDX)

    public class AndroidLauncher extends AndroidApplication {

      private static final String AD_UNIT_ID_BANNER = "ca-app-pub-7938591782705263/4150532439";

      protected AdView adView;
      protected View gameView;


      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
        cfg.useAccelerometer = false;
        cfg.useCompass = false;

        // Do the stuff that initialize() would do for you
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

        FrameLayout layout = new FrameLayout(this);//base container layout
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
        layout.setLayoutParams(params);

        AdView admobView = createAdView();//ads the banner and the app view to the base layout 
        layout.addView(admobView);
        View gameView = createGameView(cfg);
        layout.addView(gameView);

        setContentView(layout);
        startAdvertising(admobView);
        layout.bringChildToFront(admobView);//this is currently not working, I need to pause and resume app to show the banner

      }

      private AdView createAdView() {
        adView = new AdView(this);
        adView.setAdSize(AdSize.SMART_BANNER);
        adView.setAdUnitId(AD_UNIT_ID_BANNER);
        adView.setId(12345);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, Gravity.LEFT|LinearLayout.FOCUS_LEFT|Gravity.TOP|LinearLayout.FOCUS_UP);

        //last hard try to get vertical banner at left side :/
        adView.setRotation(270);
        adView.setPadding(0, 0, 0, 0);
        adView.setTop(0);
        adView.setLeft(0);
        adView.setRight(0);
        adView.setX(0);
        adView.setY(0);
        adView.refreshDrawableState();
        adView.setLayoutParams(params);
        return adView;
      }

      private View createGameView(AndroidApplicationConfiguration cfg) {
        gameView = initializeForView(new Main(), cfg);
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

        gameView.setLayoutParams(params);
        return gameView;
      }

      private void startAdvertising(AdView adView) {
        AdRequest adRequest = new AdRequest.Builder().build();
        adView.loadAd(adRequest);
      }


      @Override
      public void onResume() {
        super.onResume();
        if (adView != null) adView.resume();
      }

      @Override
      public void onPause() {
        if (adView != null) adView.pause();
        super.onPause();
      }

      @Override
      public void onDestroy() {
        if (adView != null) adView.destroy();
        super.onDestroy();
      }
(...)

非常感谢,祝你有个美好的一天! ;)

1 个答案:

答案 0 :(得分:0)

解决方法是让FrameLayout包含GameView,相对布局包含AdView相对布局参数(换行内容并对齐父左)和更改旋转轴,然后rotateview工作正常。

但广告仍然不可见,我试过这个:Admob ads appear only after first refresh并且没有效果。我必须按回家并恢复应用以查看广告...