2015-05-10 55 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的高度。在我的手機中看起來不錯,但在其他手機中並不總是如此。 *哦,是的,我正在使用畢加索。 –

相關問題