【问题标题】:force onLayout in a subView whose dimensions doesn't change在尺寸不变的子视图中强制 onLayout
【发布时间】:2012-07-05 11:34:53
【问题描述】:

我有一个自定义 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;
        ...
    }       

有什么方法可以更好地获得相同的结果?

【问题讨论】:

    标签: android android-layout viewgroup


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-01-18
      • 2010-11-29
      • 2012-07-08
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多