AdMob的横幅广告声明,在安卓类捐赠的错误 [英] admob banner ad declaration in class giving errors in android
问题描述
在我的Android游戏,我宣布AdMob的横幅广告中的类,而不是布局。我用下面的code。在 onSetContentView
:
保护无效onSetContentView(){
最后的FrameLayout的FrameLayout =新的FrameLayout(本);
最后FrameLayout.LayoutParams frameLayoutLayoutParams =
新FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT,
FrameLayout.LayoutParams.FILL_PARENT);
最终AD浏览报AD浏览报=新的AD浏览报(这一点,AdSize.BANNER,CA-APP-酒馆7036151237分之7554016237953661);
adView.refreshDrawableState();
adView.setVisibility(AdView.VISIBLE);
最后FrameLayout.LayoutParams adViewLayoutParams =
新FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT,
Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
AdRequest adRequest =新AdRequest();
adView.loadAd(adRequest);
this.mRenderSurfaceView =新RenderSurfaceView(本);
mRenderSurfaceView.setRenderer(mEngine);
最后android.widget.FrameLayout.LayoutParams surfaceViewLayoutParams =
新FrameLayout.LayoutParams(super.createSurfaceViewLayoutParams());
frameLayout.addView(this.mRenderSurfaceView,surfaceViewLayoutParams);
frameLayout.addView(AD浏览报,adViewLayoutParams);
this.setContentView(的FrameLayout,frameLayoutLayoutParams);
}
在我的清单文件我用了:
<机器人:名称=com.google.ads.AdActivity
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
错误日志返回以下错误:
致命异常:主要
java.lang.NoSuchMethodError:android.widget.FrameLayout $的LayoutParams< INIT>
在com.nguyenxuan.fruitmatching.Menu.onSetContentView(Menu.java:132)
在org.anddev.andengine.ui.activity.BaseGameActivity.onCreate(BaseGameActivity.java:62)
在android.app.Activity.performCreate(Activity.java:5122)
在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
在android.app.ActivityThread.access $ 600(ActivityThread.java:156)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1340)
在android.os.Handler.dispatchMessage(Handler.java:99)
在android.os.Looper.loop(Looper.java:153)
在android.app.ActivityThread.main(ActivityThread.java:5297)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:511)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:833)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
在dalvik.system.NativeStart.main(本机方法)
我想你正在使用的19构建目标你的code编译但会崩溃的设备/仿真器在Android&LT运行; API级别19,因为
在 FrameLayout.LayoutParams(FrameLayout.LayoutParams源)构造函数可从API 19.你应该转换为旧目标API 1 的FrameLayout .LayoutParams(ViewGroup.MarginLayoutParams源)。修改您的code如下:
最后FrameLayout.LayoutParams frameLayoutLayoutParams =
((ViewGroup.MarginLayoutParams)(新FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT,
FrameLayout.LayoutParams.FILL_PARENT)));
最后FrameLayout.LayoutParams adViewLayoutParams =
((ViewGroup.MarginLayoutParams)(新FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT,
Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM)));
In My android game I'm declared admob banner ad in class instead of layout. I had used the following code in onSetContentView
:
protected void onSetContentView() {
final FrameLayout frameLayout = new FrameLayout(this);
final FrameLayout.LayoutParams frameLayoutLayoutParams =
new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT,
FrameLayout.LayoutParams.FILL_PARENT);
final AdView adView = new AdView(this, AdSize.BANNER, "ca-app-pub-7554016237953661/7036151237");
adView.refreshDrawableState();
adView.setVisibility(AdView.VISIBLE);
final FrameLayout.LayoutParams adViewLayoutParams =
new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT,
Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM);
AdRequest adRequest = new AdRequest();
adView.loadAd(adRequest);
this.mRenderSurfaceView = new RenderSurfaceView(this);
mRenderSurfaceView.setRenderer(mEngine);
final android.widget.FrameLayout.LayoutParams surfaceViewLayoutParams =
new FrameLayout.LayoutParams(super.createSurfaceViewLayoutParams());
frameLayout.addView(this.mRenderSurfaceView, surfaceViewLayoutParams);
frameLayout.addView(adView, adViewLayoutParams);
this.setContentView(frameLayout, frameLayoutLayoutParams);
}
And in my manifest file i had used:
<android:name="com.google.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />
Error log returns the following error:
FATAL EXCEPTION: main
java.lang.NoSuchMethodError: android.widget.FrameLayout$LayoutParams.<init>
at com.nguyenxuan.fruitmatching.Menu.onSetContentView(Menu.java:132)
at org.anddev.andengine.ui.activity.BaseGameActivity.onCreate(BaseGameActivity.java:62)
at android.app.Activity.performCreate(Activity.java:5122)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
at android.app.ActivityThread.access$600(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5297)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
I suppose you're using a build target of 19. Your code will compile but will crash on devices/emulators running on android < Api Level 19 because,
the FrameLayout.LayoutParams(FrameLayout.LayoutParams source) constructor is available from API 19. You should cast to the older target API 1 FrameLayout.LayoutParams (ViewGroup.MarginLayoutParams source). Modify your code as follows:
final FrameLayout.LayoutParams frameLayoutLayoutParams =
((ViewGroup.MarginLayoutParams) (new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT,
FrameLayout.LayoutParams.FILL_PARENT)));
final FrameLayout.LayoutParams adViewLayoutParams =
((ViewGroup.MarginLayoutParams) (new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT,
Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM)));
这篇关于AdMob的横幅广告声明,在安卓类捐赠的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!