我正在尝试使用AdWhirl和AdMob将广告整合到我的Android应用中。
AdWhirl网站向我提供了以下代码:
AdWhirlLayout adWhirlLayout = (AdWhirlLayout) findViewById(R.id.layoutAdWhirl);
int diWidth = 320;
int diHeight = 52;
int density = (int) getResources().getDisplayMetrics().density;
int scaledWidth = (int) (diWidth * density);
int scaledHeight = (int) (diHeight * density);
adWhirlLayout.setAdWhirlInterface(this);
adWhirlLayout.setMaxWidth(scaledWidth);
adWhirlLayout.setMaxHeight(scaledHeight);
这在我的一些模拟器上运行得很好,但是当我尝试一些较小或较旧的模拟器时,我在LogCat中遇到以下错误:
Not enough space to show ad! Wants: 480, 75, Has: 320, 52
如果我使用他们的代码来请求尺寸合适的广告,我该怎么做,但他们不会展示该广告?
答案 0 :(得分:5)
这里有几件事:
AdMob广告需要320x50与密度无关的像素才能展示广告。每个Android设备,即使是旧的小设备,都符合这些规格。小型240x400像素手机是低密度的,意味着1px = 0.75dp,因此在纵向模式下仍然有320dp来显示广告。您的小型仿真器可能处于这样一种状态:它们非常小(低像素数),但具有中等或高密度,因此仿真器不是320dp宽。检查您的模拟器设置 - 它们可能不代表任何设备。
上面的代码不需要计算最大宽度和最大高度。只要xml给出AdWhirlView 320x52dp大小(或更优选wrap_content
),您就不需要获取设备密度来手动计算这些值。
更新:
我有一个新理论。您正在显示AdMob SDK Wants: 480, 75
表示您在高密度设备上运行的错误,因为它将320x50dip乘以1.5。但是,这段代码:
int density = (int) getResources().getDisplayMetrics().density;
正在施放1.5到1,因此adWhirlLayout的最大宽度和高度被错误地设置为320x52像素。对于低密度设备来说,这可能也是一个问题,因为0.75的密度可以被投射到0.它可能适用于中密度设备。
AdWhirl文档有点过时,但可能应该说float density
而不是int density
。