我正在将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

08-04 23:09
查看更多