在实际创建UI之前获取UI的大小?

时间:2014-07-09 21:30:48

标签: android user-interface

我正在开发一款主要由代码驱动的Android应用,而不是xml。

ListView的适配器想要知道项目的高度。但这又可能取决于项目中UI元素的大小。例如,如果项目包含一个复选框,则复选框的大小可能会影响列表项的布局,从而可能会更改高度,具体取决于是否需要换行。

问题 - 有没有办法获得Android UI元素的大小而不实际创建它?类似于在绘制文本之前可以使用Paint或TextPaint对象获取文本大小的方式。

1 个答案:

答案 0 :(得分:1)

没有创造它?不,但您可以使用MeasureSpec类并在创建后手动测量视图。为什么你需要知道确切的尺寸?你不能只为你的案例将LayoutParams设置为MATCH_PARENT(宽度)和WRAP_CONTENT(高度)吗?

也就是说,如果您确实需要知道,可以使用ListView的宽度作为宽度MeasureSpec,然后将其用于高度MeasureSpec:

// Tell the View it should be exactly as wide as the ListView...
int widthSpec = MeasureSpec.makeMeasureSpec(listViewWidth, MeasureSpec.EXACTLY);

// ... and as tall as it wants to be ...
int heightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);

// ... measure it with these constraints ...
item.measure(widthSpec, heightSpec);

// ... and retrieve the measured height.
int itemHeight = item.getMeasuredHeight();