如何在屏幕上显示准确数量的 ListView 项目?

Mos*_*tor 5 android listview android-layout android-listview

我希望调整 ListView 中行的大小,以便屏幕上可以容纳其中的六行。为此,我需要知道 ListView 有多少垂直空间(而不是整个屏幕)。但是,由于尚未渲染任何视图,因此在 onCreate() 中无法进行任何测量。

如果我在渲染后进行测量,ListView 可能会被绘制然后调整大小,这可能会分散注意力。在渲染 ListView 之前建立必要的行高的最明智的方法是什么?

Car*_*nal 4

onCreate你可以得到你的屏幕的高度并除以6。现在在你getView你可以得到每个项目的顶部布局的参考,假设你已经将它的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;
}
Run Code Online (Sandbox Code Playgroud)

是的,这假设ListView是全屏的。如果您有其他布局,则必须考虑这些高度。

那么你的身高将是:int heightForEachItem = (screenHeight - otherlayoutsHeightTogether) / 6;