我正在将adMob横幅成功添加到我的应用中。出现横幅时,我需要获取其高度以调整所有布局元素的大小。我正在使用正确触发的事件onReceivedAd。但是,alturaBanner =0。那么,如何获取其高度?谢谢你。
/** Called when an ad is received. */
@Override
public void onReceiveAd(Ad ad)
{
adView.setVisibility(View.VISIBLE);
int alturaBanner = adView.getHeight();
RelativeLayout.LayoutParams params1 = (android.widget.RelativeLayout.LayoutParams) browse2
.getLayoutParams();
params1.setMargins(0, alturaBanner, 0, 0);
Log.d(LOG_TAG, "onReceiveAd");
Toast.makeText(this, "onReceiveAd", Toast.LENGTH_SHORT).show();
}
最佳答案
在准备 View 之前获取 View 的高度将始终返回0。
无论您使用哪种设备/屏幕,都使用下一个代码来获取正确的大小:
private static void runJustBeforeBeingDrawn(final View view, final Runnable runnable)
{
final ViewTreeObserver vto = view.getViewTreeObserver();
final OnPreDrawListener preDrawListener = new OnPreDrawListener()
{
@Override
public boolean onPreDraw()
{
runnable.run();
final ViewTreeObserver vto = view.getViewTreeObserver();
vto.removeOnPreDrawListener(this);
return true;
}
};
vto.addOnPreDrawListener(preDrawListener);
}
在给定的runnable内部,您可以查询 View 的实际大小。
或者,可以根据需要使用addOnGlobalLayoutListener而不是addOnPreDrawListener。
另一种方法是使用onWindowFocusChanged(并检查hasFocus == true),但这并不总是最好的方法(仅用于创建简单 View ,而不用于动态创建)
编辑:替代runJustBeforeBeingDrawn:https://stackoverflow.com/a/28136027/878126