2012-07-05 109 views
0

我現在有這個UI結構:設置的LayoutParams不應用速度不夠快

Activity (ACT) 
    LinearLayout (LL) 
    HorizontalScrollView (HSV) 
     RelativeLayout (RL) 

當我設置RL的佈局參數,他們沒有得到應用,直到後來,當它是爲時已晚。

var TotalWidth = GetNewWidth() // eg returns 1000... 

var lp = this.LayoutRoot.LayoutParameters; 
lp.Width = TotalWidth; 
this.LayoutRoot.LayoutParameters = lp; 

// this.LayoutRoot.LayoutParameters.Width == 1000 
// this.LayoutRoot.Width == 0 

this.LayoutRoot.RequestLayout(); 
this.LayoutRoot.ForceLayout(); 
this.RequestLayout();  
this.ForceLayout(); 

// this.LayoutRoot.LayoutParameters.Width == 1000 
// this.LayoutRoot.Width == 0 

這不是一個問題,如果我不使用的寬度,但我:) 我想這樣做:

this.ScrollTo(500, 0); 

這有沒有效果的總寬度HSV孩子目前0

但是,如果我這樣做:

this.PostDelayed(() => this.ScrollTo((int) percent, 0), 500); 

它的工作原理,經過500ms的德爾唉。

HSV是一個派生類,它管理着它的內容本身 - 只是一個空的RL,我用它來設置寬度,這樣我就可以有一個巨大的區域來繪製圖像。排序一個巨大的滾動畫布。 另外,我想要做的是在HSV的OnSizeChanged重寫成員。我想這樣做,如果控件重新調整大小,控件將滾動到相同的位置。寬度取決於高度(保持高寬比)

回答

1

您必須等到佈局重新計算完畢。當您撥打forceLayout時,佈局不會立即發生,它只會被添加到UI線程中的隊列中。一旦他們獲得了新的職位和規模,他們將立即爲所有涉及的視圖調用onLayoutonSizeChanged。對此你沒有什麼可以做的。

+0

我希望我的假設是錯誤的。事實並非如此。謝謝。 – Matthew