获取隐藏动态视图的高度



我有两个视图,一个在另一个下面。显示firstView,隐藏secondView。按下一个按钮,一个会折叠,然后第二个会展开。问题是动态构建secondView:它具有onMeasure的高度计算(标记云,将标签包装到新行,结果视图高度发生变化(。

因此,我可以使用以下代码将标签云容器视图的高度作为单行子视图获取,而无需计算高度。但是,如何在显示之前获得secondView的真实高度呢?

view.measure(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
int height = view.getMeasuredHeight();

您可以使用 ViewTreeObserver 等待视图布局,然后获取高度和宽度。

int height;
int width
secondView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
height = secondView.getHeight();
width = secondView.getWidth();
secondView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});

解决方法如下:

  • 包装应展开RelativeLayoutview
  • view设置为可见,但通过在屏幕外删除来隐藏:设置layout_marginTop="-1000dp"
  • 然后,您可以通过等待代码中view的实际高度(见下文(来获得它变得可见

片段:

view.post(new Runnable() {
@Override
public void run() {
viewHeight = view.getHeight(); // getting real height, use further for animation
view.setVisibility(View.GONE);
clearLayoutMargins(view); // clear margins here
}
});

最新更新