0

這是我的第一個問題。層次結構查看器使高度發生變化

我已經構建了一個自定義組件:RelativeLayout,底部有TextView,上面有兩個ImageView,充當直方圖的2列可點擊元素。要設置欄的高度,我得到onLayout()的「可用高度」,作爲容器的高度減去標籤的一個:

@Override 
protected void onLayout(boolean changed, int l, int t, int r, int b) { 
    super.onLayout(changed, l, t, r, b); 
    mAvailHeight = getHeight()-findViewById(R.id.label).getHeight(); // it works 

,然後分配給它(乘以一個0.1-1的值。)作爲佈局參數到ImageView的:

View bar = findViewById(R.id.bigBar); 
    RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) bar.getLayoutParams(); 
    rlp.height = Math.round((float)mAvailHeight * mBigBarHeight); 
} 

mBigBarHeight變量(0.-1)可通過該功能進行設置:

public void setBigBarHeight(float value, float max) { 
    mBigBarHeight = value/max;  
    requestLayout(); // 
    invalidate(); // do these help? i find no difference 
} 

查閱。當我在onCreate()中添加這些「HistogramBar」中的一個,並設置高度並按照我的預期標記一切正常。如果我稍後嘗試修改它們,請說onClickSomething:

bar.setBigBarHeight(25, 100); 
bar.setSmallBarHeight(50, 100); 
bar.setLabel("jjk"); 

只有標籤更改。我使用Hierarchy Viewer進行了檢查,實際上LayoutParams確實發生了變化。如果我再次點擊更改顯示。

有趣的是,即使我做「加載視圖層次」從工具變化得到顯示(仿真器)!!怎麼了?這很奇怪嗎?我想在我的代碼中這樣做,以便它的工作原理!

我找不到任何類似的問題。謝謝。

+0

一個類似的問題:http://stackoverflow.com/q/2469466/503900。答案並沒有幫助我。 – bigstones 2010-11-11 20:35:58

回答

1

當您從該工具加載層次結構時,會發生重新佈局/重繪來衡量性能。當你應該的時候你可能不會調用requestLayout()。

+0

謝謝,我設法正確繪製了一個組件。但是當我用for循環動態地將它們中的一些添加到LinearLayout中時,它們沒有佈局(再次使用它們顯示)。你能幫我理解我應該調用requestLayout()嗎? – bigstones 2010-11-11 15:17:32

+0

請注意,如果在相同的代碼中添加一個簡單的ImageView來代替我的視圖,它就可以工作。所以我想這個問題是我的看法。 – bigstones 2010-11-11 20:36:48

+0

在此處跟進:http://stackoverflow.com/q/4163918/503900 – bigstones 2010-11-12 18:29:32