Java 布局参数是否需要API 19?
我正在使用Andengine并希望添加Admob横幅。我找到了这个代码,它工作得很好。但是对于这段代码,LayoutParams至少需要API 19。我想要低一点,比如说8点之类的。我可以用什么来代替Java 布局参数是否需要API 19?,java,android,admob,andengine,Java,Android,Admob,Andengine,我正在使用Andengine并希望添加Admob横幅。我找到了这个代码,它工作得很好。但是对于这段代码,LayoutParams至少需要API 19。我想要低一点,比如说8点之类的。我可以用什么来代替 @Override protected void onSetContentView() { // CREATING the parent FrameLayout // final FrameLayout frameLayout = new FrameLayout(this);
@Override protected void onSetContentView() {
// CREATING the parent FrameLayout //
final FrameLayout frameLayout = new FrameLayout(this);
// CREATING the layout parameters, fill the screen //
final FrameLayout.LayoutParams frameLayoutLayoutParams =
new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT);
// CREATING a Smart Banner View //
adView = new AdView(this);
adView.setAdSize(AdSize.SMART_BANNER);
adView.setAdUnitId("ca-app-pub-2181015300018417/9550656088");
// Doing something I'm not 100% sure on, but guessing by the name //
adView.refreshDrawableState();
adView.setVisibility(AdView.VISIBLE);
// ADVIEW layout, show at the bottom of the screen //
final FrameLayout.LayoutParams adViewLayoutParams =
new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT,
Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM);
// REQUEST an ad (Test ad) //
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.addTestDevice("AB38B36BA72798C94A9C9329007FD4B0")
.build();
adView.loadAd(adRequest);
// RENDER the add on top of the scene //
this.mRenderSurfaceView = new RenderSurfaceView(this);
mRenderSurfaceView.setRenderer(mEngine, this);
// SURFACE layout ? //
final android.widget.FrameLayout.LayoutParams surfaceViewLayoutParams =
new FrameLayout.LayoutParams(super.createSurfaceViewLayoutParams());
// ADD the surface view and adView to the frame //
frameLayout.addView(this.mRenderSurfaceView, surfaceViewLayoutParams);
frameLayout.addView(adView, adViewLayoutParams);
// SHOW AD //
this.setContentView(frameLayout, frameLayoutLayoutParams);
}//onSetContentView()的结尾//问题在于FrameLayout.LayoutParams构造函数 不支持 另一个FrameLayout作为参数,直到api 19 但是,还有两个签名: public FrameLayout.LayoutParams(ViewGroup.LayoutParams源)-api 1 public FrameLayout.LayoutParams(ViewGroup.MarginLayoutParams源)-api 1 FrameLayout.LayoutParams是ViewGroup.MarginLayoutParams子类 因此,在检查参数layout是否为FrameLayout.LayoutParams之后 您可以按以下方式解决此问题:
if(super.createSurfaceViewLayoutParams() instanceOf FrameLayout.LayoutParams){
final android.widget.FrameLayout.LayoutParams surfaceViewLayoutParams =
new FrameLayout.LayoutParams((ViewGroup.MarginLayoutParams)super.createSurfaceViewLayoutParams());
}
第一个签名之间的差异(API 19)
及其他
新的LayoutParams对象将不会设置重力
if(super.createSurfaceViewLayoutParams() instanceOf FrameLayout.LayoutParams){
ViewGroup.MarginLayoutParams paramLP=(ViewGroup.MarginLayoutParams)super.createSurfaceViewLayoutParams();
int gravityHolder=((FrameLayout.LayoutParams)super.createSurfaceViewLayoutParams()).gravity;
final android.widget.FrameLayout.LayoutParams surfaceViewLayoutParams =
new FrameLayout.LayoutParams(paramLP);
surfaceViewLayoutParams.gravity=gravityHolder;
}
我的工作方法如下:
final android.widget.FrameLayout.LayoutParams surfaceViewLayoutParams =
android.widget.FrameLayout.LayoutParams(android.view.ViewGroup.LayoutParams.MATCH_PARENT,android.view.ViewGroup.LayoutParams.MATCH_PARENT);
surfaceViewLayoutParams.gravity = Gravity.CENTER;
似乎适用于Android Studio+Andengine,不需要API19。阅读文档。只有一个构造函数是api19,其余的都是API1。您可能并不真正需要该构造函数。根据文档,它不需要api 19。只有一个构造函数需要api 19,只需使用另一个。我使用了另一个,现在它工作得很好。谢谢大家!
final android.widget.FrameLayout.LayoutParams surfaceViewLayoutParams =
android.widget.FrameLayout.LayoutParams(android.view.ViewGroup.LayoutParams.MATCH_PARENT,android.view.ViewGroup.LayoutParams.MATCH_PARENT);
surfaceViewLayoutParams.gravity = Gravity.CENTER;