我想在屏幕顶部显示横幅,但有一个问题。在我的代码中(这不是我的代码,因为我正在学习过程中),我有两个选择。在屏幕底部的屏幕下方或上方显示横幅。
public void showBanner(final boolean inLayout) {
//banner ad
if (BANNER_AD_UNIT_ID.length() > 0) {
// Create an ad.
adView = new AdView(this);
adView.setAdSize(AdSize.BANNER);
adView.setAdUnitId(BANNER_AD_UNIT_ID);
if (inLayout) {
//make ad visible on bottom of screen over surface
RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
params1.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
params1.addRule(RelativeLayout.CENTER_HORIZONTAL);
adView.setLayoutParams(params1);
} else {
//make ad visible on bottom of screen under surface
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.BOTTOM;
params.weight = 0;
adView.setLayoutParams(params);
}
如果我将params1.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
从BOTTOM
更改为TOP
,横幅将显示在顶部的屏幕上。但是如果我params.gravity = Gravity.BOTTOM;
从BOTTOM
更改为TOP
,广告仍然显示在底部:(
有人可以帮助我吗?非常感谢!
布局代码:
// Start loading the ad in the background.
adView.loadAd(adRequest);
adView.setAdListener(new AdListener() {
public void onAdLoaded() {
View parent = (View) adView.getParent();
if (parent != null) {
if (!(parent.equals(layout) || parent.equals(linear_layout))) {
if (inLayout)
layout.addView(adView);
else
linear_layout.addView(adView);
recalculateScreen();
}
} else {
//add new banner ad to screen
if (inLayout)
layout.addView(adView);
else
linear_layout.addView(adView);
recalculateScreen();
}
}
});
}
}
//add relative layout to linear layout for banner ad mobility
linear_layout = new LinearLayout(this);
linear_layout.setOrientation(LinearLayout.VERTICAL);
linear_layout.addView(layout);
setContentView(linear_layout);
holder = surface.getHolder();
我认为这段代码总体View
是一个RelativeLayout
,它有一个包含其他一些View
的LinearLayout
。 第一个代码将您的addz与父项的底部对齐,第二个代码将其与LinearLayout
视图容器中容器的底部对齐-(idk,如果我有意义的话)
但是您的初始编辑有效,因为它相对于父级对齐,而您的第二次编辑会重新定义 addView 在其容器中的位置......因此在 else 代码中更改它(假设我的逻辑是正确的)
//make ad visible on bottom of screen under surface
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.BOTTOM;
params.weight = 0;
adView.setLayoutParams(params);
// my addition starts here
//inLayout is linearlayout, that was what i thought but no.
ViewGroup parent = (ViewGroup) adView.getParent(); // your linear layout
if(parent.getChildCount() >0){
View viewToTake = parent.getChildAt(0); // taking the first child element
parent.remove(parent.indexOfChild(adView)); // you get the index of the adview layout and remove it
parent.addView(adView,0); // adding it at the first position
parent.addView(viewToTake,parent.getChildCount());// adding the view we took out back into play, you can decide to add it as the
// second element since it was your initial first with parent.addView(viewToTake,1);
编辑 1复制粘贴这个并留下第一个..
adView.loadAd(adRequest);
adView.setAdListener(new AdListener() {
public void onAdLoaded() {
View parent = (View) adView.getParent();
if (parent != null) {
if (!(parent.equals(layout) || parent.equals(linear_layout))) {
if (inLayout)
layout.addView(adView);
else
linear_layout.addView(adView,0); // adding it to linearLayout first element, that's what the zero does
recalculateScreen();
}
} else {
//add new banner ad to screen
if (inLayout)
layout.addView(adView);// same here
else
linear_layout.addView(adView,0); //same here, goes to the top
recalculateScreen();
}
}
});
}
}对于相对的layou,您可以执行对齐父项的操作