android 获取view的宽高

 有时候,我们需要在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的宽高)