博客已转移
一、简介
在某些情况下,由于项目的需求(比如说九宫格、六宫格、用listview代替一个Linearlayout),可能需要用到禁止Listview或者Gridview的滚动功能,这里能给出两种解决的方案:
(1)自定义view,重写dispatchTouchEven方法(网上没人提到,其实这样用会有一个弊端,就是MotionEvent.ACTION_MOVE被禁止后,移动触摸的事件将会失效,事实上,所有的button和item的点击事件都能通过触摸后移动来取消这个事件。也就是说,这么写后,这个隐性的功能就没了,点击事件将无法取消。手感和用户体验将会下降。)
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_MOVE) {
return true; // 禁止GridView滑动
}
return super.dispatchTouchEvent(ev);
}
(2)不需要自定义view,但是需要固定item的数量和高度,然后设置gridview.setOverScrollMode(View.OVER_SCROLL_NEVER)就可以了(不得不说,固定item的数量和高度是非常有必要的,毕竟已经不能滚动了,超出的屏幕的item将毫无意义