在Android中,如何重新布局视图?

18

我正在将一系列自定义视图添加到LinearLayout中。我已经重写了这些自定义视图的onMeasure方法,以根据某些参数返回尺寸。根据用户输入,我想改变这些参数,来改变视图的大小。如何强制LinearLayout“重新布局”其子项,以反映新的尺寸?

2个回答

26

哦... linearLayout.requestLayout()。


invalidate() 对我来说没有用,我认为这是因为使布局无效会强制所有子元素重新绘制自己,但实际上并不会调整/重新布局子元素。 - ab11
在Android OS 4.x平板电脑(ICS)上,重新布局对我没有帮助。有用的是删除 getWindow().requestFeature(Window.FEATURE_NO_TITLE); - Juuso Ohtonen

14

我的情况是我需要立即重新布局所有子元素。 requestLayout() 不能立即完成此操作。

对于那些与我有相同需求的人:

这将立即强制重新布局视图的子元素(假设视图自身的宽度和高度不需要更改)

private void reLayoutChildren(View view) {
    view.measure(
        View.MeasureSpec.makeMeasureSpec(view.getMeasuredWidth(), View.MeasureSpec.EXACTLY),
        View.MeasureSpec.makeMeasureSpec(view.getMeasuredHeight(), View.MeasureSpec.EXACTLY));
    view.layout(view.getLeft(), view.getTop(), view.getRight(), view.getBottom());
}

这是唯一对我有效的解决方案。invalidaterequestLayout都无法解决,所以感谢您提供的提示! - Sean Adkinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接