2017-03-28 35 views
2

我有一個帶有兩個子視圖的LinearLayout(垂直)。第一個是ScrollView,第二個是Visibility.GONE的另一個佈局,它的大小不固定(由其子節點決定)。Android:如何確定視圖的新大小

<LinearLayout vertical> 

    <ScrollView> ... </ScrollView> 

    <AnotherLayout visibility=GONE height=wrap_content> ... </AnotherLayout> 

</LinearLayout> 

在某個時間點我想顯示AnotherLayout。但是,一旦彈出,我也想調整ScollView的滾動。爲此,我需要知道這個AnotherLayout的大小。

我在做這樣的事情:

int oldHeight = scrollArea.getHeight(); 
linearLayout.setVisibility(VISIBLE); 
int newHeight = scrollArea.getHeight(); 

但oldHeight和newHeight仍然是相同的。

我該如何計算新的身高?

+0

正是我所需要的,以及 –

+1

可能的複製[獲取設置包內容佈局的高度(HTTP: //stackoverflow.com/questions/35122998/get-height-of-layout-that-is-set-to-wrap-content) –

回答

0

這兩個維度是相同的,因爲可見性更改需要時間並且代碼行已在此之前運行,所以它返回相同。 您可以使用可視性監聽器來計算可見性改變後的尺寸,您可以使用該

linearLayout.setTag(linearLayout.getVisibility()); 
    linearLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      int newVis = linearLayout.getVisibility(); 
      if((int)linearLayout.getTag() != newVis) 
      { 
       linearLayout.setTag(linearLayout.getVisibility()); 
       //visibility has changed 
       int newHeight = scrollArea.getHeight(); 
      } 
     } 
    }); 
+0

不錯。謝謝。一旦條件滿足,我想喲也可以移除globalLayoutListener。 – stillwaiting

+0

隨時歡迎您。是的,當然可以 –

相關問題