我正在成功地将adMob横幅添加到我的应用程序。当横幅出现时,我需要得到它的高度,以便调整所有布局元素的大小。我使用的是event 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();
}发布于 2012-05-03 22:23:18
在准备好视图之前获取视图的高度将始终返回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中,您可以查询视图的实际大小。
或者,如果您愿意,可以使用addOnGlobalLayoutListener而不是addOnPreDrawListener。
另一种方法是使用onWindowFocusChanged (并检查hasFocus==true),但这并不总是最好的方法(仅用于简单的视图创建,不用于动态创建)
编辑:runJustBeforeBeingDrawn的替代方案:https://stackoverflow.com/a/28136027/878126
发布于 2015-12-01 14:37:25
您可以获取任何类型的横幅的高度,甚至在它被添加到布局之前。
int heightPixels = AdSize.SMART_BANNER.getHeightInPixels(this);或
int heightPixels = AdSize.FULL_BANNER.getHeightInPixels(myContext);或者是DIP的
int heightDP = AdSize.BANNER.getHeight();因此,为了满足您的需要,您可以这样做:
/** Called when an ad is received. */
@Override
public void onReceiveAd(Ad ad)
{
adView.setVisibility(View.VISIBLE);
int alturaBanner = AdSize.BANNER.getHeight(); // This gets the adsize, even if the view is not inflated.
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();
}只需将AdSize.BANNER更改为AdSize.SMART_BANNER或您使用的任何标语类型即可。
发布于 2013-10-04 17:48:14
我使用以下方法来获取AdView的高度:
adView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int height = adView.getHeight();
if (height > 0) {
// now the height is gotten, you can do things you want
}
}
});当视图树中的视图的全局布局状态或可见性发生变化时,会触发onGlobalLayout()。
https://stackoverflow.com/questions/10433140
复制相似问题