【发布时间】:2011-03-03 15:16:09
【问题描述】:
您好,我正在开发一款 Android 应用并使用 AdWhirl 来展示我的广告。我希望能够处理 AdWhirl 不返回任何广告的情况。当它失败时,我想显示一个装饰条。
谁能给我一个例子?
提前致谢,
【问题讨论】:
-
嘿奚,你找到解决办法了吗?
-
@sven:不,我没有。我切换回 AdSense。 :(
您好,我正在开发一款 Android 应用并使用 AdWhirl 来展示我的广告。我希望能够处理 AdWhirl 不返回任何广告的情况。当它失败时,我想显示一个装饰条。
谁能给我一个例子?
提前致谢,
【问题讨论】:
好的,我现在知道了。有两种可能的方法,一种很容易,另一种需要更多的工作。
只要没有可显示的内容,adwhirl 布局就会保持不可见。所以你可以简单地创建一个FrameLayout,在后台包含你的后备视图和前面的 adwhirl 视图,类似于:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="53dp"
android:layout_gravity="center_horizontal"
>
<!-- fallback view -->
<TextView
android:id="@+id/ad_fallback"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:text="nothing to say..."
>
</FrameLayout>
然后您可以在您的代码中将视图添加到布局中(其中parentView 是上面显示的膨胀布局):
final DisplayMetrics dm = activity.getResources().getDisplayMetrics();
final AdWhirlLayout adView = new AdWhirlLayout(activity, ADWHIRL_ID);
adView.setMaxWidth((int) (dm.density * 320));
adView.setMaxHeight((int) (dm.density * 53));
adView.setGravity(Gravity.CENTER);
parentView.addView(adView);
就是这样。
在GoodNews 中,虽然我想要一种更复杂的方式:当 AdWhirl 忙于获取广告并且没有任何内容可填写内部广告横幅时,应该显示“广告加载...”消息(作为资源提供应显示该应用程序,以便它即使在互联网不可用时也能正常工作)。加载消息很简单,因为它可以如上所示实现,但动态内部横幅有点棘手。
解决方案是 AdWhirl 提供的强大的自定义事件 - 不幸的是 - 记录不充分。第一步是在 AdWhirl 网络界面中创建一个自定义事件:
上述配置确保只有在 AdWhirl 无法展示任何真实广告时才会触发您的自定义事件。
现在您需要在代码中处理事件。因此,您需要一个实现AdWhirlLayout.AdWhirlInterface 并定义一个不带参数的公共方法和一个与自定义事件指定的函数名称相同的名称的类。然后,此方法可以将您的特定视图注入 AdWhirl 布局:
class AdWhirlEventHandler implements AdWhirlLayout.AdWhirlInterface {
private final AdWhirlLayout adView;
public AdWhirlEventHandler(AdWhirlLayout adView) {
this.adView = adView;
}
@Override
public void adWhirlGeneric() {
// nothing to be done: Generic notifications should also be
// configurable in the AdWhirl web interface, but I could't find them
}
/**
* Will be called by AdWhirl when our custom event with the function name
* "fallback" is fired. Called via reflection.
*/
public void fallback() {
try {
final View fallbackView =
... // inflate the view to be shown here
adView.pushSubView(fallbackView);
/*
* reset backfill chain and schedule next ad update
*/
adView.adWhirlManager.resetRollover();
adView.rotateThreadedDelayed();
} catch (MyExpectedException ex) {
/*
* forward to next option from the backfill list
*/
adView.rolloverThreaded();
}
}
}
现在您需要像这样使用AdWhirlLayout 注册您的事件处理程序:
adView.setAdWhirlInterface(new AdWhirlEventHandler(adView));
就是这样。
【讨论】: