Mopub集成说明建议使用以下代码段在xml中创建广告视图:
<com.mopub.mobileads.MoPubView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/adview"
android:layout_width="fill_parent"
android:layout_height="50dp"
/>
然后说明建议在活动的创建方法中创建广告视图,如下所示:
moPubView = (MoPubView)findViewById(R.id.adview);
moPubView.setAdUnitId("123412341234");
moPubView.loadAd();
不幸的是,moPubView
未创建,因为Cocos2dx 2.1不再使用XML进行布局。因此,由于空指针异常,应用程序在启动时崩溃。
在尝试制作广告视图之前,我尝试将R.layout.main
传递给setContentView
。这确实可以成功创建广告视图,但应用程序的其余部分不可见。
如何在不使用XML的情况下以编程方式创建上述视图?
我认为这解决了空指针异常问题,而无需调用setContentView
。
答案 0 :(得分:4)
private static BannerAdManager m_adDelegate = null;
private static FrameLayout.LayoutParams m_bannerParam = null;
private static FrameLayout m_appLayout = null;
public static void initialize(Activity p_activity)
{
// create instance of delegate
if( m_adDelegate == null )
{
m_adDelegate = new BannerAdManager();
}
m_activity = p_activity;
//~~~setup mopub banner ad
//~~~create mopub ad view
m_mopubView = new MoPubView(m_activity);
m_bannerParam = new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT
);
m_mopubView.setAdUnitId(Config_Android._ID);
m_mopubView.setBannerAdListener(m_adDelegate);
m_mopubView.loadAd();
//get current layout
m_appLayout = (FrameLayout) m_activity.findViewById(android.R.id.content);
// set default alignment
m_bannerParam.gravity = Gravity.TOP | Gravity.CENTER;
//add mopub view to layout
m_appLayout.addView(m_mopubView, m_bannerParam);
}
public static void setBannerPositionTopWithPadding(float p_padding)
{
getActivity().runOnUiThread(new Runnable()
{
public void run()
{
activity = getActivity();
m_bannerParam.gravity = Gravity.TOP | Gravity.CENTER;
m_bannerParam.width = FrameLayout.LayoutParams.WRAP_CONTENT;
m_bannerParam.height = FrameLayout.LayoutParams.WRAP_CONTENT;
m_bannerParam.topMargin = (int) p_padding;
m_appLayout.updateViewLayout(m_mopubView, m_bannerParam);
m_mopubView.refreshDrawableState();
}
});
}