如何在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);
谢谢,这是完美的! – Zwiebel 2012-07-13 10:39:22