拿到view真实宽高的4种方式

来源:互联网 发布:武汉人工智能峰会 编辑:程序博客网 时间:2024/06/05 17:54

实例代码

public class MainActivity extends Activity {    private TextView tv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }    @Override    protected void onStart() {        super.onStart();        //方式1  post方法        tv.post(new Runnable() {            @Override            public void run() {                int width = tv.getMeasuredWidth();                int height = tv.getMeasuredHeight();            }        });        //方式2 视图树        ViewTreeObserver observer = tv.getViewTreeObserver();        observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {            @Override            public void onGlobalLayout() {                    tv.getViewTreeObserver().removeGlobalOnLayoutListener(this);                    int width = tv.getMeasuredWidth();                    int height = tv.getMeasuredHeight();            }        });    }    //方式3 回调方法    @Override    public void onWindowFocusChanged(boolean hasFocus) {        super.onWindowFocusChanged(hasFocus);        if(hasFocus){            int width = tv.getMeasuredWidth();            int height = tv.getMeasuredHeight();        }    }        //方式4 测量一遍该控件        //    参数1  测量控件mode    参数2  大小         int widthMeasureSpec=MeasureSpec.makeMeasureSpec(MeasureSpec.EXACTLY, measuredWidth);  //  mode+size        int heightMeasureSpec=MeasureSpec.makeMeasureSpec(MeasureSpec.AT_MOST, 1000);// 我的高度 最大是1000        // 测量规则 宽度是一个精确的值width, 高度最大是1000,以实际为准        tv.measure(widthMeasureSpec, heightMeasureSpec); // 通过该方法重新测量控件         int measuredHeight2 = tv.getMeasuredHeight();}
原创粉丝点击