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