gpt4 book ai didi

滚动时Android listview末尾有额外空间

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:53:58 26 4
gpt4 key购买 nike

我在 ListView 上平滑滚动时遇到了奇怪的行为。我在列表中有 30 个项目。当我平滑滚动时

listview.smoothScrollToPositionFromTop(29, 0);

屏幕末尾会有一些额外的空间。实际上 ListView 向上移动了一点。下面附上图片。但如果我手动滚动,将没有空间。可以采取什么措施来解决此行为?

Image 1

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_orange_light">

<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

</RelativeLayout>

最佳答案

正如您所说,我认为这是一个 Android 问题。它似乎是过度滚动动画的一部分,似乎在完成动画之前就“卡住了”。我在使用 SwipeToRefresh 时也有类似的经历,刷新后进度指示器不会完全消失。

无论如何,您可以通过关闭动画来解决问题

    listView.setOverScrollMode(View.OVER_SCROLL_NEVER);

不幸的是,即使手动滚动也会丢失动画。如果您可以接受,我认为这会解决您的问题。

AbsListView#setOverScrollMode(int)

编辑:(接受原始答案后)

我还找到了另一种解决方法。这个保留了滚动动画。不幸的是,它还有另一个缺点。如果用户在执行任何其他操作之前自动滚动,则存在底部边框的相同问题。如果用户手动滚动到底部 1st,从那时起就没有问题了。如果用户自动滚动并获得边框,然后手动滚动,就没有问题了。因此,这是替代方法。

    Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.invisible_footer, null);
listView.setOverscrollFooter(drawable);

在可绘制文件夹中,“invisible_footer.xml”

<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="2dp"
android:width="10dp"

android:viewportWidth="10"
android:viewportHeight="2">

<!-- a horizontal line -->
<path android:pathData="M 1 1 H 10"
android:strokeColor="#00000000" android:strokeWidth="1" />

</vector>

ListView.html#setOverscrollHeader()

这给出了选择:

  1. 丢失滚动动画
  2. 保留动画但冒着用户看到底部边框 1 次的风险

关于滚动时Android listview末尾有额外空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42552990/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com