view.post获取height=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的原始高度,不是显示高度。

对您有帮助,看心情打赏

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容