美文网首页
android 获取view的宽高

android 获取view的宽高

作者: liubin_5288 | 来源:发表于2017-04-13 20:54 被阅读41次

     有时候,我们需要在activity启动的时候获取view的宽高,但很多时候在onStart()或onRsume()中获取的都是0,这是view的measure过程与activity的生命周期不是同步的,所以当没有测量完成,返回的都是0。那要怎么获取呢?

     1. onWindowFocusChanges

     调用这个方法时那说明view已经初始化完毕,宽高已经赋值啦。但是这方法会被调用多次,如获取焦点与失去,activity暂停与恢复等都会被调用。

    public void onWindowFocusChanged(boolean focus){

            super.onWindowFocusChanged(focus);

            if(focus){

                 int width = view.getMeasuredWidth();

                int  height = view.getMeasuredHeight();

         }

    }

    2. view.post(runnable)

    通过post一个runnable到信息列队尾部,当调用此方法时view已经初始化好了。

    protected void  onStart() {

         super.onStart();

        view.post(newRunnable() {

             public void run() {

                  int width =view.getMeasuredWidth();

                  int height =view.getMeasuredHeight();

             }

        });

    }

    3.ViewTreeObserver

    使用ViewTreeObserver的OnGlobalLayotListener接口可以获取宽高,但是OnGlobalLayoutListener接口中的onGlobalLayout会被调用多次。

    ViewTreeObserver observer= view.getViewTreeObserver();

    observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

          @RequiresApi(api= Build.VERSION_CODES.JELLY_BEAN)

          @Override

          public voidonGlobalLayout() {

                  view.getViewTreeObserver().removeOnGlobalLayoutListener(this);

                  int  width =view.getMeasuredWidth();

                 int   height =view.getMeasuredHeight();

         }

    });

    相关文章

      网友评论

          本文标题:android 获取view的宽高

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