我在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>
我已经实现了。但是,在最初的第一次,它将填充保持在底部,但是,从第二次开始,它的工作正常。
<?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);
}
});
}
}
您是否尝试将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"/>
正如你所说,我认为这是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()
这提供了选择:
我正在尝试创建一个动画,其中包含所有卡片的div从右到左滑动,这是我已经实现的。 问题是在div的末尾和重置时有一个巨大的白色空隙,我通过指定在时div应该已经翻译了来解决这个问题,但是这会在轮播重置时引起口吃。 有没有我可以把动画重置为0%而不会造成口吃的效果?代码在下面
我正在尝试创建一个动画,其中包含所有卡片的div从右到左滑动,这是我已经实现的。 问题是在div的末尾和重置时有一个巨大的白色空隙,我通过指定在时div应该已经翻译了来解决这个问题,但是这会在轮播重置时引起口吃。 有没有我可以把动画重置为0%而不会造成口吃的效果?代码在下面
在我的应用程序,我有品牌页脚在所有屏幕滚动结束(屏幕有滚动)和静态在屏幕底部时(没有滚动)。 但我面临的问题,以实现这与屏幕,其中有列表。我正在使用RecycerView显示列表。我想在RecycerView的结尾显示品牌页脚,当它有滚动时,它将在底部滚动时可见。这是可以用带有页脚的RecycerView实现的。 但是当RecycerView没有滚动(当列表中的项目很少时),我希望页脚固定在屏幕底
将数据写入字符串生成器的逻辑,在由于append(“\n”)而迭代最后一条记录之后,将添加一个我不需要的新空行。
设置: 我正在Xcode 5中处理一个显示一组文本字段的视图。为了在键盘出现时处理滚动,我使用滚动视图来放置我的文本字段。我正在使用自动布局。 问题: 我正在努力解决在运行时向滚动视图顶部添加额外空间的问题。就像一个插页被应用到我的滚动视图中,尽管我已经通过日志确认插页为零。 在我的viewDidLoad()方法实现中,我这样做是为了确认值。。。 输出: 在我的第一个文本字段上方添加的空格(ins
我不知道确切的原因,但是我的tableview的滚动条永远不会结束。 这是桌面视图的中间,一切看起来都很好 但当我走到尽头 滚动条没有到达终点... 我想我的约束是可以的(我使用的是autolayout),因为除了滚动条,tableview显示得很好。 我的视图控制器是一个,只包含一个。下面是一个屏幕截图,总结如下: 代码未添加任何约束。你知道我怎么调试这个吗? 提前谢谢 编辑:我试图删除和重新创