Android view.getheight()在onGlobalLayout()方法中第一次没有给出正确的值

时间:2017-01-16 07:21:32

标签: android android-layout

View v = viewgroup.findViewById(R.id.gradient);
    v.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            LayerDrawable mLD = (LayerDrawable)v.getBackground();
            mLD.setLayerInset(1, 0, v.getHeight() / 2, 0, 0);
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
                v.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            } else {
                v.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            }
        }
    });

在此代码中,viewgroup是一个relativelayout。它包含一个视图v。我在视图上应用了一个渐变。 Gradient有2件商品。所以我需要获得视图的高度并相应地放置项目。 v.getHeight()没有给出正确的结果。在此代码中,onGlobalLayout()仅在我删除侦听器时被调用一次。

如果我评论是否还有部分代码,onGlobalLayout()被多次调用。在那种情况下,我第二次获得v.getHeight()的正确结果。

所以任何人都知道为什么我第一次使用onGlobalLayout()方法调用时没有获得正确的值?

1 个答案:

答案 0 :(得分:0)

而不是OnGlobalLayout(),只需使用View.post()即可。在你的情况下像:

//The view from which the height is required
View requiredView = findViewById(R.id.your_view);
//This will be added in the runnable Queue
requiredView.post(new Runnable() {
    @Override
    public void Run() {
        LayerDrawable mLD = (LayerDrawable) requiredView.getBackground();
        mLD.setLayerInset(1, 0, requiredView.getHeight() / 2, 0, 0);
    }
});