android中怎么获取view的宽高?

2020-06-09  本文已影响0人  ModestStorm

下面整理了三种获取view的宽高方式:

1.在Activity中的onWindowFocuseChanged中获取:
 /*
     * 1.该方法会因Activity是否可见回调多次,伴随着onStop和onResume触发
     */
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if(hasFocus){
            int width=textView.getMeasuredWidth();
            int height= textView.getMeasuredHeight();
        }
    }
2.使用view.post的方式获取view的宽高,原理是发送message到队列尾部,消息触发的时候view的测量工作已经完成:
 //2.发送一个消息到消息队列的尾部,这时view的测量流程已经执行结束了,所以可以拿到宽高
        textView.post(new Runnable() {
            @Override
            public void run() {
                int width=textView.getMeasuredWidth();
                int height= textView.getMeasuredHeight();
            }
        });
3.使用viewTreeObsever监听view树状态的变化.
 /*3.监听view树的状态也可以拿到宽高
        * 使用ViewTreeObserver的众多回调可以完成这个功能,比如使用onGlobalLayoutListener这个接口.
        * 当view树发生改变,或者View树内部的view的可见性发生改变时,此方法将被调用.此方法可能会被调用多次,该方法也会执行多次不推荐采用。
         */
ViewTreeObserver viewTreeObserver=textView.getViewTreeObserver();
        viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                int width=textView.getMeasuredWidth();
                int height= textView.getMeasuredHeight();
            }
        });
上一篇 下一篇

猜你喜欢

热点阅读