我需要完全禁用listview中的过度滚动,这样我才能实现自己的过度滚动功能。
在查看核心listview类时似乎很简单,只需将overscroll
模式设置为OVERSCROLL_NEVER即可。这个很好的工作在我的三星Galaxy s2上。但对于Galaxy Tab 2.3.3.
有没有人对三星ListView自定义有很多经验可以帮助我?
答案 0 :(得分:3)
它适用于三星Galaxy Tab(使用Android 2.2):
try {
// list you want to disable overscroll
// replace 'R.id.services' with your list id
ListView listView = ((ListView)findViewById(R.id.services));
// find the method
Method setEnableExcessScroll =
listView.getClass().getMethod("setEnableExcessScroll", Boolean.TYPE);
// call the method with parameter set to false
setEnableExcessScroll.invoke(listView, Boolean.valueOf(false));
}
catch (SecurityException e) {}
catch (NoSuchMethodException e) {}
catch (IllegalArgumentException e) {}
catch (IllegalAccessException e) {}
catch (InvocationTargetException e) {}
答案 1 :(得分:2)
您必须将列表视图的高度设置为固定值。 如果您的内容是动态的,那么在重置适配器后,有一个很好的功能来测量实际的列表大小:
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = 0;
int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST);
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
listView.requestLayout();
}
设置适配器后,必须将listview作为参数调用此静态方法。 您现在可以添加滚动视图(里面是您的列表视图和其他视图)。 我会说2.3.3之前的这种行为是一个小错误...除了我描述的方式之外,没有简单的方法将listview包含在scrollview中。 因此他们引入了OVERSCROLL_NEVER模式:)
代码来自DougW!
答案 2 :(得分:1)
不是我的解决方案,但适用于我:)