我有两个视图,一个在另一个下面。显示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);
}
});
解决方法如下:
- 包装应展开
RelativeLayout
的view
- 将
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
}
});