我试图在运行时获取列表视图高度以使项目适合屏幕高度。
以下是我的代码:在我的getView()
int totalHeight = activity.getListView().getHeight();
int rowHeight = totalHeight / getCount(); // Divide by number of items.
activity.getListView().setScrollContainer(false);
activity.getListView().setVerticalScrollBarEnabled(false);
convertView.setMinimumHeight(rowHeight);
在我的活动中,我以编程方式创建了宽度和高度均为MATCH_PARENT的列表视图。
但我尝试调试并发现只有列表视图高度为0的第一项,但对于其余项目,它给我适当的高度。
为什么这样 ?如何解决这个问题?
答案 0 :(得分:2)
这很可能是由于尚未创建视图。在这种情况下,高度为0。
您可以使用以下内容获取视图的高度:
final ListView listView = activity.getListView();
ViewTreeObserver vto = listView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int totalHeight = listView.getHeight();
int rowHeight = totalHeight / getCount(); // Divide by number of items.
listView.setScrollContainer(false);
listView.setVerticalScrollBarEnabled(false);
convertView.setMinimumHeight(rowHeight);
ViewTreeObserver obs = listView.getViewTreeObserver();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
obs.removeOnGlobalLayoutListener(this);
} else {
obs.removeGlobalOnLayoutListener(this);
}
}
});
检查Build.VERSION
的原因是在Jelly Bean之前的SDK中,方法的名称不同(OnGlobalLayout vs GlobalOnLayout)
答案 1 :(得分:0)
这种情况正在发生,因为当第一项的getView
被调用时,listview
的高度未确定。
您需要使用ViewTreeObserver
为您提供布局更改事件,并且您可以获得高度。