广告在 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);
}
我有一款 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);
}