我正在尝试使用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)
如果我使用他们的代码来请求尺寸合适的广告,我该怎么办,但他们不会展示该广告?
这里有几件事:
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;
Run Code Online (Sandbox Code Playgroud)
正在转换1.5到1,因此adWhirlLayout的最大宽度和高度被错误地设置为320x52像素.这对于低密度设备来说可能也是一个问题,因为0.75密度将被铸造为0.它可能适用于中密度设备.
AdWhirl文档有点过时,但它可能应该说float density而不是int density.
| 归档时间: |
|
| 查看次数: |
3806 次 |
| 最近记录: |