您好我正在使用Android应用并使用AdWhirl来展示我的广告。我希望能够在AdWhirl没有返回广告时处理这种情况。当它失败时,我想展示一个装饰条。
有人能举个例子吗?
提前致谢,
答案 0 :(得分:5)
好的,我现在已经弄明白了。有两种可能的方法,一种是非常容易的,另一种需要更多的工作。
只要没有任何内容可显示,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 Web界面中创建自定义事件:
上述配置可确保您的自定义事件仅在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));
就是这样。