Поэтому я пытался разместить баннер AdMob в верхней части игрового экрана (который отображается с использованием openGL через расширенный объект GLSurfaceView).Я использую RelativeLayout, который, как я обнаружил, работал для других людей во время моего исследования, и он работает для меня, когда я выравниваю его по дну с помощью adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM)
:

однако, когда это изменяется на adParams.addRule(RelativeLayout.ALIGN_PARENT_TOP)
, я сталкиваюсь с проблемами:

Это действительно помещает объявление всверху, но вся нижняя часть экрана белая, и мой вид с поверхности больше не виден.Почему он это делает?Я пробовал кучу разных макетов и других предложений, которые нашел вокруг, но, похоже, ничего не работает.
Мне удалось заставить объявление занимать только небольшую часть экрана с помощью ConstraintLayout и размещения LinearLayout / RelativeLayout, к которому я добавил свой GLSurfaceView, но оно не отображалось.Также кажется, что SurfaceView есть, потому что я могу слышать музыку и игру, когда играю на сенсорных событиях.
Вот код того, что я сейчас делаю:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//set fullscreen
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//create our rendering surface
mGLView = new GameSurfaceView(this, this);
mGLView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);
//premium players don't get ads
if(is_premium)
{
setContentView(mGLView);
}
else
{
MobileAds.initialize(this, ad_app_id);
//initialize interstitial ad
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId(ad_string_inter_test);
mInterstitialAd.loadAd(new AdRequest.Builder().build());
mInterstitialAd.setAdListener(new AdListener()
{
@Override
public void onAdClosed()
{
mInterstitialAd.loadAd(new AdRequest.Builder().build());
}
});
//create our layout and add our openGL scene
layout = new RelativeLayout(this);
layout.setLayoutParams(new WindowManager.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.WRAP_CONTENT));
layout.addView(mGLView);
setContentView(layout);
//initialize banner ad
mBannerAd = new AdView(this);
mBannerAd.setAdSize(AdSize.SMART_BANNER);
mBannerAd.setAdUnitId(ad_string_banner_test);
mBannerAd.setBackgroundColor(Color.TRANSPARENT);
mBannerAd.setAdListener(new AdListener()
{
@Override
public void onAdLoaded()
{
RelativeLayout.LayoutParams adParams =
new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
adParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
//adParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
layout.addView(mBannerAd, adParams);
}
});
//create ad request and begin loading
AdRequest bannerRequest = new AdRequest.Builder().addTestDevice(DEVICE_TEST_ID).build();
mBannerAd.loadAd(bannerRequest);
}
}