我正在开发一款主要由代码驱动的Android应用,而不是xml。
ListView的适配器想要知道项目的高度。但这又可能取决于项目中UI元素的大小。例如,如果项目包含一个复选框,则复选框的大小可能会影响列表项的布局,从而可能会更改高度,具体取决于是否需要换行。
问题 - 有没有办法获得Android UI元素的大小而不实际创建它?类似于在绘制文本之前可以使用Paint或TextPaint对象获取文本大小的方式。
答案 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();