当前位置: 首页 > 知识库问答 >
问题:

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

秦胡媚
2023-03-14

我在listview上体验过平滑滚动的奇怪行为。我的清单上有30个项目。当我平滑滚动通过

listview.smoothScrollToPositionFromTop(29, 0);

在屏幕的末尾会有一些额外的空间。实际上listview上移了一点。图片附后。但是如果我手动滚动,就没有空间了。如何解决这种行为?

这是我的布局:

<?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>

共有3个答案

逄念
2023-03-14

我已经实现了。但是,在最初的第一次,它将填充保持在底部,但是,从第二次开始,它的工作正常。

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.socialintegration.ListAct">
<ListView
    android:id="@+id/listTemp"
    android:layout_width="match_parent"
    android:layout_height="match_parent"></ListView>

</RelativeLayout>

法典:

public class ListAct extends AppCompatActivity {
ListView l;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list);
    String str[] = new String[50];
    for (int i = 0; i < 50; i++) {
        str[i] = "poistion" + i;
    }
    ArrayAdapter adpt = new ArrayAdapter(ListAct.this, android.R.layout.simple_dropdown_item_1line, str);
    l = (ListView) findViewById(R.id.listTemp);
    l.setAdapter(adpt);

    l.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            l.smoothScrollToPositionFromTop(29, 0);
        }
    });
}
}
奚卓
2023-03-14

您是否尝试将ListView的高度设置为< code>wrap_content而不是< code>match_parent?

即使在[本教程]中,所有属性都设置为wrap_content。因此,将宽度和高度上的ListView属性替换为:

<ListView
    android:id="@+id/listview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
呼延衡
2023-03-14

正如你所说,我认为这是Android系统的问题。它似乎是过度滚动的动画的一部分,它似乎在完成动画之前被“卡住”。我在< code>SwipeToRefresh上有过类似的经历,刷新后进度指示器不会完全消失。

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

    listView.setOverScrollMode(View.OVER_SCROLL_NEVER);

不幸的是,即使手动滚动,也会丢失动画。如果你能忍受这一点,我认为这将解决你的问题。

AbsListView#setOverScrollMode(int)

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

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

    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 次
 类似资料:
  • 我正在尝试创建一个动画,其中包含所有卡片的div从右到左滑动,这是我已经实现的。 问题是在div的末尾和重置时有一个巨大的白色空隙,我通过指定在时div应该已经翻译了来解决这个问题,但是这会在轮播重置时引起口吃。 有没有我可以把动画重置为0%而不会造成口吃的效果?代码在下面

  • 我正在尝试创建一个动画,其中包含所有卡片的div从右到左滑动,这是我已经实现的。 问题是在div的末尾和重置时有一个巨大的白色空隙,我通过指定在时div应该已经翻译了来解决这个问题,但是这会在轮播重置时引起口吃。 有没有我可以把动画重置为0%而不会造成口吃的效果?代码在下面

  • 在我的应用程序,我有品牌页脚在所有屏幕滚动结束(屏幕有滚动)和静态在屏幕底部时(没有滚动)。 但我面临的问题,以实现这与屏幕,其中有列表。我正在使用RecycerView显示列表。我想在RecycerView的结尾显示品牌页脚,当它有滚动时,它将在底部滚动时可见。这是可以用带有页脚的RecycerView实现的。 但是当RecycerView没有滚动(当列表中的项目很少时),我希望页脚固定在屏幕底

  • 将数据写入字符串生成器的逻辑,在由于append(“\n”)而迭代最后一条记录之后,将添加一个我不需要的新空行。

  • 设置: 我正在Xcode 5中处理一个显示一组文本字段的视图。为了在键盘出现时处理滚动,我使用滚动视图来放置我的文本字段。我正在使用自动布局。 问题: 我正在努力解决在运行时向滚动视图顶部添加额外空间的问题。就像一个插页被应用到我的滚动视图中,尽管我已经通过日志确认插页为零。 在我的viewDidLoad()方法实现中,我这样做是为了确认值。。。 输出: 在我的第一个文本字段上方添加的空格(ins

  • 我不知道确切的原因,但是我的tableview的滚动条永远不会结束。 这是桌面视图的中间,一切看起来都很好 但当我走到尽头 滚动条没有到达终点... 我想我的约束是可以的(我使用的是autolayout),因为除了滚动条,tableview显示得很好。 我的视图控制器是一个,只包含一个。下面是一个屏幕截图,总结如下: 代码未添加任何约束。你知道我怎么调试这个吗? 提前谢谢 编辑:我试图删除和重新创