Android: 寻找 ListView 中每个列表项的渲染高度

7

有没有办法在不在布局xml文件中设置高度的情况下查找ListView中当前显示的项的高度?

我已经尝试过了

View listItem = listAdapter.getView(currentIndex, null, listView);
listItem.measure(MeasureSpec.EXACTLY, MeasureSpec.UNSPECIFIED);
int itemHeight = listItem.getMeasuredHeight();

虽然它最初有效,但在启动新的仿真器会话后,在measure()调用期间决定抛出Null Pointer异常。

我试图做的是,当程序选择一个简短列表中的项目时,使该项目居中(仅显示2或3个完整项目)。


在你的问题中加入错误。我认为listAdapter.getView(currentIndex, null, listView)返回了null。由于listItem是null,所以当你调用listItem.measure()时会出现NullPointerException。 - Mario Kutlev
你正在使用自定义适配器吗? 也许从自定义适配器中进行此测量会更好,因为高度是在视图绘制后立即计算的。 - Neto Marin
1个回答

0
这对我有用:
public static int getItemViewHeight(Context context, Adapter adapter, int index) {
    FrameLayout fakeParent = new FrameLayout(context);
    View view = adapter.getView(index, null, fakeParent);
    view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
    return view.getMeasuredHeight();
}

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