美文网首页
view.post获取height=0

view.post获取height=0

作者: 郑永博 | 来源:发表于2018-12-23 13:59 被阅读0次

    view获取宽高常见的方式:

    view.post(new Runnable() {  
        @Override  
        public void run() {  
            view.getHeight();  
        }  
    });
    

    但是这种方式不是万能的,有时候对于ViewGroup无效,这时候要借助viewgroup的onMeasure方法:

    @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            int count = getChildCount();
            for (int i = 0; i < count; i++) {
                View view = getChildAt(i);
                measureChild(view, widthMeasureSpec, heightMeasureSpec);
                Log.i("test", px2dip(view.getMeasuredHeight()) + "--" + px2dip(view.getHeight()));
            }
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            Log.i("test", px2dip(getMeasuredHeight()) + "");
        }
    
    
    /**
         * 将像素转换成dp
         * 
         * @param context
         * @param pxValue
         * @return
         */
        public int px2dip(float pxValue) {
            final float scale = getResources().getDisplayMetrics().density;
            return (int) (pxValue / scale + 0.5f);
        }
    

    注意这里使用的是getMeasuredHeight,不是getHeight,计算的是子view的原始高度,不是显示高度。

    对您有帮助,看心情打赏

    相关文章

      网友评论

          本文标题:view.post获取height=0

          本文链接:https://www.haomeiwen.com/subject/ethnkqtx.html