2015-05-10 26 views
4

注:Android:是否可以在绘制之前计算视图的高度?

  • 我不希望使用任何getViewTreeObserver()侦听器,或者任何听众的。我想计算视图的高度在绘制之前为
  • 我试过getMeasuredHeight(),但每次都返回0。

有什么建议吗?

+0

第一次尝试'查看#措施(int widthMeasureSpec,int heightMeasureSpec)'? – pskink

+0

首先测量你的视图,然后得到测量的高度 – pskink

+0

好吧,我刚刚尝试了它,我得到不正确的值...我读了Java关于度量的解释,但我仍然没有找到一种方法来计算绘制后的正确高度。我想知道为什么人们说这是不可能的。 –

回答

0

您必须使用getViewTreeObserver()。你可以做的一件事就是将视图中的可见性设置为以可见或不可见开始(只是为了创建高度),然后将其更改为代码中不可见/消失。例如:

private int mHeight = 0; 
private View mView; 

class... 

// onCreate or onResume or onStart ... 
mView = findViewByID(R.id.someID); 
mView.getViewTreeObserver().addOnGlobalLayoutListener( 
new OnGlobalLayoutListener(){ 

    @Override 
    public void onGlobalLayout() { 
     // gets called after layout has been done but before display 
     // so we can get the height then hide the view 


     mHeight = mView.getHeight(); 

     mView.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
     mView.setVisibility(View.GONE); 
    } 

}); 
+0

这正是我不想要的...... –

+0

没有其他办法。 –

0

其实还有另一种方式,我用它为一些定制的东西,但它会definetely工作了

final Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
     void run() { 
      if(view.getHeight() == 0) { 
       handler.postDelayed(this, 50); 
      } else { 
       // you're all set 
      } 
     } 
}, 50); 

你希望这有助于

+0

这完全像调用onGlobalLayoutListener()。视图被绘制,然后处理程序返回它的高度。我想在绘制视图之前计算高度。 –

+0

那你为什么要这样做?可能有另一个workarround,因为它没有任何意义 –

+0

我试图为Gridview的项目设置自定义高度。将参数设置为GridView.AUTO_FIT或simillars会导致UI中的大小发生变化,因为每个项目都会加载一个Image。我尝试了一切,从设置默认的固定尺寸图像源到使用ImageView的缩放类型进行播放,但都没有奏效。 我现在所做的是设置一个固定的数字作为GridView的高度。在我的手机中看起来不错,但在其他手机中并不总是如此。 *哦,是的,我正在使用毕加索。 –

相关问题