在子视图中强制onLayout,其尺寸不会改变

时间:2012-07-05 11:34:54

标签: android android-layout viewgroup

我有一个自定义ViewGroup,里面有一些视图。

在响应某个事件时,会调用requestLayout,并在OnLayout中查看某些视图 获得新的布局位置。

其中一个保持其位置,但需要在内部重新排列。但是,由于布局位置不会改变,因此不会调用此视图的onlayout方法。尝试在此视图中致电requestLayoutforceLayoutinvalidate无效。

我发现的唯一脏技巧是改变它的一些值位置以强制布局改变,但我认为应该有更好的方法。所以,到现在为止我做了一些事情(可怕的):

    int patch = 0;
    @Override protected void onLayout(boolean changed, int l, int t, int r, int b) {
        ...
        _myView.patchedLayout(patch);
        _myview.layout(l1, t1 , r1, t1+patch);
        patch = (patch+1) % 2;
        ...
    }       

以更好的方式获得相同结果的任何方式?

1 个答案:

答案 0 :(得分:4)

我终于得到了解决方案:我需要覆盖onMeasure,并确保在我的视图中调用mesure

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    ...
    _myview.measure(widthMeasureSpec, heightMeasureSpec);
    ...

它将在视图的私有字段mPrivateFlags中设置LAYOUT_REQUIRED标志,因此它将强制调用onLayout

相关问题