2013-03-19 34 views
8

對於View,有時可見,有時不可見,取決於用戶的行爲,(保持在同一活動中)什麼是優選的?INVISIBLE在哪種情況下用來代替GONE?

myView.setVisibility(View.INVISIBLE); // or 
myView.setVisibility(View.GONE); 

沒有其他元件取決於myView的大小或尺寸,從而所述圖形結果是一樣的。

隱身狀態不會改變視圖的尺寸,我想這是更理想比了,因爲與走後,我們可能必須測量和不必要的重繪等意見。然後重新測量並重新繪製它們,當myView再次變爲可見時。其他

回答

20

你是在正確的軌道想着對測量的影響上。哪一個更有效率取決於你改變視圖的可見性的頻率。

例如,如果視圖在大多數情況下都不可見,那麼使其GONE可能會更有效,因爲系統不會不必要地測量和佈置不可見視圖,無論何時需要調整其他視圖屏幕上。另一方面,如果視圖頻繁地在可見和不可見之間變化,您可能會從INVISIBLE獲得更好的性能,因爲您可能會避免每次轉換時出現額外的度量/佈局。

-2

我的元素是不依賴於你的視圖的可見性,那麼你可以使用them..Both的將是服務於同樣的目的。

0

我想從我的側面增加這方面的一些經驗:

我有一個動畫按鈕(使用ValueAnimator)。按鈕從一側移動到另一側。

此按鈕將切換列表的內容。

  • 第一種方法:使用一個listview並更改適配器=>不平滑; '按鈕移動動畫'跳轉到結束位置,因爲新適配器的加載需要從UI線程中花費太多時間。該按鈕只有200毫秒來執行動畫,這一次完全由ListView拍攝。
  • 我添加了一個第二ListView,使用ViewSwitcher =>同樣的問題。
  • 因爲實際上一個ViewSwitcher僅設置視圖可見GONE,我列表設置爲可見成本多少UI線程時預期的重新劃分。所以我現在所做的是添加一個FrameLayout,把兩個ListView在那裏,並將其設置爲INVISIBLE而不是GONE。現在看不到口吃了!

希望這可以幫助別人。