gpt4 book ai didi

java - LayoutParams 需要 API 19?

转载 作者:行者123 更新时间:2023-11-30 02:51:52 25 4
gpt4 key购买 nike

我正在使用 Andengine 并想添加 Admob 横幅。我找到了这段代码并且运行良好。但是对于这段代码,LayoutParams 至少需要 API 19。我想更低,比如 8 或类似的东西。我可以用什么代替?

@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;
}

关于java - LayoutParams 需要 API 19?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23997598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com