我希望listview中的行大小合适,以便正好有六行可以放在屏幕上。为此,我需要知道listview(而不是整个屏幕)有多少垂直空间可用。但是,由于尚未呈现视图,因此无法在oncreate()中进行测量。
如果在渲染之后进行测量,则可能会绘制列表视图,然后调整其大小,这可能会分散注意力。在呈现listview之前,建立必要行高的最聪明的方法是什么?
最佳答案
在onCreate
中,您可以得到屏幕的高度并除以6。
现在在您的getView
中,您将获得每个项目的顶部布局的引用,suppost您将其id命名为root,即它是一个LinearLayout
。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if(view == null){ some inflate }
LinearLayout root = (LinearLayout) view.findViewById(R.id.root);
LayoutParams lp = root.getLayoutParams();
lp.height = screenHeight/6;
root.setLayoutParams(lp);
....
return view;
}
是的,这假设
ListView
是全屏的。如果你有其他的布局,你必须考虑到这些高度。
那么你的身高是:
int heightForEachItem = (screenHeight - otherlayoutsHeightTogether) / 6;