【问题标题】:Why does calling setLayoutParams on subview trigger layout on parent view为什么在子视图上调用 setLayoutParams 会触发父视图上的布局
【发布时间】:2015-09-30 23:38:57
【问题描述】:

我有一个自定义视图,里面有一个 TextView。当我更新 TextView 的 layoutParams 时,会在父视图上触发 requestLayout。有人知道为什么吗?有没有办法将 TextView 定位在其父视图中而无需重新布局整个父视图?

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)childTextView.getLayoutParams();
params.setMargins(0, 100, 0, 0);
childTextView.setLayoutParams(params);

上面的setLayoutParams 调用触发了我想避免的布局传递。

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    --- ??

    不!!

    你知道LayoutParams 做什么?它做它所做的,它的功能就是你所看到的。

    父母最好根据他们的孩子来照顾他们的孩子 - LayoutParams 告诉父母应该如何对待孩子。如果这种情况发生变化,父母需要重新调整对孩子的照顾。

    所以没有办法-(你必须忍受它。

    【讨论】:

    • 但是为什么父视图必须重新布局?为什么不只是子视图? “你知道LayoutParams 做什么吗?” - 你从来没有真正告诉我它实际上做了什么。你刚才说“它做它做的事”......
    • 因为父级现在很脏-假设父级的宽度为WRAP_CONTENT,并且您将子级的宽度调整为500,父级是否应该重新调整自己?或不?如果没有,你的父视图会有问题吗?, requestlayout() 运行一个从上到下的布局传递..@dmoss18
    • 有道理,但假设你的父母有一个硬编码的宽度和高度,而子视图只是设置它的边距,就像我上面的一样。看起来父母不应该是脏的。
    猜你喜欢
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    相关资源
    最近更新 更多