首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我想测量ListView的高度(getHight()= 0)

首先,要测量 ListView 的高度,您需要使用 Android 的测量工具,如 ViewTreeObserverOnGlobalLayoutListener。在测量过程中,您需要考虑 ListView 中包含的所有视图元素的高度。

以下是使用 ViewTreeObserver 测量 ListView 高度的示例代码:

代码语言:java
复制
ListView listView = findViewById(R.id.list_view);

ViewTreeObserver viewTreeObserver = listView.getViewTreeObserver();
viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        // 获取 ListView 的高度的参考:在 onGlobalLayout() 回调中,
        // ListView 的高度为 ListView 的 ViewTreeObserver 而不是 ListView 本身
        int height = listView.getHeight();
        // 取消 ViewTreeObserver 的回调,以便在需要时进行其他测量
        viewTreeObserver.removeOnGlobalLayoutListener(this);
    }
});

如果您需要实时测量 ListView 的高度,并且 ListView 中的项是可滚动的,则可以使用 OnScrollListener,如下所示:

代码语言:java
复制
OnScrollListener scrollListener = new OnScrollListener() {
    @Override
    public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
        // 当 RecyclerView 滚动状态改变时调用
        if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
            // 当 ListView 项被拖动时调用
            int firstVisible = recyclerView.findFirstVisibleItemPosition();
            int lastVisible = recyclerView.findLastVisibleItemPosition();
            int totalItemCount = recyclerView.getAdapter().getItemCount();
            int height = recyclerView.getHeight();

            // 计算 ListView 的高度
            int listViewHeight = (firstVisible == 0 ? 0 : (lastVisible == totalItemCount - 1 ? height : (firstVisible + lastVisible) * height / 2));
            // 设置 ListView 的高度
            recyclerView.setLayoutParams(new LinearLayoutManager.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, listViewHeight));
        }
    }

    @Override
    public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
        // 当 RecyclerView 滚动时调用
    }
};

recyclerView.addOnScrollListener(scrollListener);

在上述代码中,我们使用 findFirstVisibleItemPosition()findLastVisibleItemPosition() 方法来获取 ListView 中可见项的索引,然后使用 getHeight() 方法来获取 ListView 的高度。通过这些信息,我们可以计算出 ListView 的高度,并使用 setLayoutParams() 方法来设置 ListView 的高度。

需要注意的是,在实际应用中,您需要根据具体的需求和环境来选择合适的测量方法,并根据实际情况进行相应的调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券