我有一个活动,其布局中包含一个AdView
和一个ads:adSize="SMART_BANNER"
。它位于屏幕底部,自定义WebView
下。现在,WebView
具有根据其可用空间(像素尺寸)呈现的内容。因此,在渲染WebView
内容之前,我需要知道SMART_BANNER
将占据的大小(尤其是高度),以及WebView
剩下的大小。从here可以看出,智能横幅的高度可以为32dp
,50dp
和90dp
中的任何一个。
据我了解,我需要等待AdView
的格式确定之后才能呈现WebView
。我怎样才能做到这一点?也许是setting an AdListener?但是,AdListener
的{{3}}似乎只能让我确定例如加载广告后...我不想等待广告加载,只想等待广告的实际尺寸即可。
我知道我可以通过将AdView
设置为BANNER
,并将其高度固定为50dp
来避免所有这些情况,并且确实可以正常工作。但是我更喜欢SMART_BANNER
,主要是因为它可以在小手机屏幕上以横向模式将高度缩小到32dp
,从而为实际内容留出更多空间。
答案 0 :(得分:3)
AdView
在实际加载广告之前没有API来检索其大小,并且该类为final
,因此您也无法自己实现它。
要动态确定横幅的高度,您需要使用怀疑的AdListener
。
另一种选择是使用根据设备屏幕高度动态选择的静态值(来自documentation)
32 dp ,其中高度≤400 dp
50 dp ,其中高度> 400 dp且≤720 dp
90 dp ,其中高度> 720 dp
(您可以检查this来确定屏幕高度,this one可以在px和dp值之间转换)
例如,您可以在Activity
中使用类似的内容:
private int getSmartBannerHeightDp() {
DisplayMetrics dm = getResources().getDisplayMetrics();
float screenHeightDp = dm.heightPixels / dm.density;
return screenHeightDp > 720 ? 90 : screenHeightDp > 400 ? 50 : 32;
}