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

标签 android android-layout listview android-listview

我希望调整 ListView 中的行的大小,以便其中的 6 行正好适合屏幕。为此,我需要知道 ListView(而不是整个屏幕)有多少垂直空间可用。但是,由于尚未呈现任何 View ,因此无法在 onCreate() 中进行任何测量。

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

最佳答案

onCreate 中,您可以获得屏幕的高度并除以 6。 现在,在您的 getView 中,您获得了每个项目的顶部布局的引用,假设您已将其命名为 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;

关于android - 如何在屏幕上显示确切数量的 ListView 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27528674/

相关文章:

java - 在带有分隔符的 ListView 中显示 JSON

android - 防止自定义 SurfaceView 在其他 View 之上绘制

Android 复选框 ListView 全选(禁用/启用)

android - 线性布局不适合屏幕尺寸

java - 如何在jni中链接静态库?

android - 连续两次调用 Activity.setContentView() 的副作用

java - 在fragment中依次显示两个Listview

Java/Android : I don't understand why this is slower than expected

android - 没有在通知点击时启动应用程序? Flutter 本地通知

android - 将自定义字体应用于带有节标题的 ListView