通过AdWhirl AdMob:没有足够的空间来展示广告!想要:480,75,有:320,52

Ken*_*and 1 android adwhirl

我正在尝试使用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);
Run Code Online (Sandbox Code Playgroud)

这在我的一些模拟器上运行得很好,但是当我尝试一些较小或较旧的模拟器时,我在LogCat中收到以下错误:

Not enough space to show ad! Wants: 480, 75, Has: 320, 52
Run Code Online (Sandbox Code Playgroud)

如果我使用他们的代码来请求尺寸合适的广告,我该怎么办,但他们不会展示该广告?

Eri*_*lag 5

这里有几件事:

  1. AdMob广告需要320x50与密度无关的像素才能展示广告.每个Android设备,即使是旧的小设备,都符合这些规格.小型240x400像素手机是低密度的,意味着1px = 0.75dp,因此在纵向模式下仍然有320dp来显示广告.您的小型仿真器可能处于这样一种状态:它们非常小(低像素数),但具有中等或高密度,因此仿真器不是320dp宽.检查您的模拟器设置 - 它们可能不代表任何设备.

  2. 上面的代码不需要计算最大宽度和最大高度.只要xml给出AdWhirlView 320x52dp大小(或更优选wrap_content),您就不需要获取设备密度来手动计算这些值.

更新:

我有一个新的理论.您正在显示AdMob SDK Wants: 480, 75意味着您在高密度设备上运行的错误,因为它将320x50dip乘以1.5.但是,这段代码:

int density = (int) getResources().getDisplayMetrics().density;
Run Code Online (Sandbox Code Playgroud)

正在转换1.5到1,因此adWhirlLayout的最大宽度和高度被错误地设置为320x52像素.这对于低密度设备来说可能也是一个问题,因为0.75密度将被铸造为0.它可能适用于中密度设备.

AdWhirl文档有点过时,但它可能应该说float density而不是int density.