如何在Libgdx中更改AdMob方向

问题描述:

我试图在用户到达屏幕时在Libgdx中更改AdMob方向。我想把它放在屏幕的底部。我已经做了处理,实现它在适当的屏幕,然后调用该方法,通过如何在Libgdx中更改AdMob方向

myHandler.moveAds(true); 

我的界面看起来是这样的:

public interface IActivityRequestHandler { 
    public void showAds(boolean show); 
    public void moveAds(boolean move); 
} 

Android的项目文件看起来是这样的:

public class MyAndroidnewActivity extends AndroidApplication implements IActivityRequestHandler { 
    protected AdView adView; 
    RelativeLayout.LayoutParams adParams; 

    private final int SHOW_ADS = 1; 
    private final int HIDE_ADS = 0; 
    private final int MOVE_ADS = 1; 
    private final int PLACE_ADS = 0; 

    protected Handler handler = new Handler() 
    { 
     @Override 
     public void handleMessage(Message msg) { 
      switch(msg.what) { 
       case SHOW_ADS: 
       { 
        adView.setVisibility(View.VISIBLE); 
        break; 
       } 
       case HIDE_ADS: 
       { 
        adView.setVisibility(View.GONE); 
        break; 
       } 
      } 
     } 
    }; 

    protected Handler moveHandler = new Handler() 
    { 
     @Override 
     public void handleMessage(Message msg) { 
      switch(msg.what) { 
       case MOVE_ADS: 
       { 
        //In my opinion this code is not good, because It doesn't do anything 
        //when I call the myHandler.moveAds(true); in an another class  
        adView.setGravity(Gravity.BOTTOM); 
        break; 
       } 
       case PLACE_ADS: 
       { 
        adView.setGravity(Gravity.TOP); 
        break; 
       } 
      } 
     } 
    }; 

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

     AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration(); 
     cfg.useGL20 = false; 
     cfg.useAccelerometer = false; 
     cfg.useCompass = false; 


      // Create the layout 
      RelativeLayout layout = new RelativeLayout(this); 

      // 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); 

      // Create the libgdx View 
      View gameView = initializeForView(new MyApp(this), false); 

      // Create and setup the AdMob view 
      adView = new AdView(this, AdSize.BANNER, "MYOWNKEY"); // Put in your secret key here 
      AdRequest re = new AdRequest(); 
      re.addTestDevice("MYOWNDEVICECODE"); 
      adView.loadAd(re); 

      // Add the libgdx view 
      layout.addView(gameView); 

      // Add the AdMob view 
      adParams = 
        new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
            RelativeLayout.LayoutParams.WRAP_CONTENT); 
      adParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
      adParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 

      layout.addView(adView, adParams); 

      // Hook it all up 
      setContentView(layout); 
     } 


     @Override 
     public void showAds(boolean show) { 
      handler.sendEmptyMessage(show ? SHOW_ADS : HIDE_ADS); 
     } 

     @Override 
     public void moveAds(boolean move) { 
      moveHandler.sendEmptyMessage(move ? MOVE_ADS : PLACE_ADS); 
     } 
    } 

但是当我调用myHandler.moveAds(true);方法在另一个类中,它不做任何事情,没有错误,只是(横向)屏幕顶部的广告,而不是底部。

在我看来,是我

protected Handler moveHandler = new Handler() 
    { 
     @Override 
     public void handleMessage(Message msg) { 
      switch(msg.what) { 
       case MOVE_ADS: 
       { 
        //In my opinion this code is not good, because It doesn't do anything 
        //when I call the myHandler.moveAds(true); in an another class  
        adView.setGravity(Gravity.BOTTOM); 
        break; 
       } 
       case PLACE_ADS: 
       { 
        adView.setGravity(Gravity.TOP); 
        break; 
       } 
      } 
     } 
    }; 

代码中的问题。也许我需要以另一种方式来控制方向,但我不知道如何。预先感谢任何帮助!

setGravity()方法决定将内容(本例中为广告)放置在AdView内的何处,而不是将AdView放置在其容器内的何处。

它看起来像你的容器是一个RelativeLayout的,所以你应该能够只是设置,而不是设置新引力的LayoutParams:

RelativeLayout.LayoutParams adParams = 
    new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
            RelativeLayout.LayoutParams.WRAP_CONTENT); 
adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); // or RelativeLayout.ALIGN_PARENT_TOP 
adView.setLayoutParams(adParams); 
+0

谢谢,这是完美的! – Zwiebel 2012-07-13 10:39:22