关于Scroview的知识点总结
学习Android好久,以前习惯将每一个模块的知识点全部用一个word文档来进行归纳整理,这样做的好处有很多,但是有一点,这些word文档容易丢,导致之前做的工作变为徒劳,从现在开始要习惯用技术博客来总结自己的学习,慢慢积累。
-ScrollView 内部只能包含一个控件
-ScrollView与内部控件的滑动冲突
ScrollView 内部只能包含一个控件
ScrollView,通过官方文档的继承关系可以看出,它继承自FrameLayout,所以它是一种特殊类型的FrameLayout,因为它可以使用用户滚动显示一个占据的空间大于物理显示的视图列表。值得注意的是,ScrollView只能包含一个子视图或视图组,在实际项目中,通常包含的是一个垂直的LinearLayout。
ScrollView与内部控件的滑动冲突
值得注意的是,ScrollView不能和ListView一起使用,因为ListView已经对垂直方向的滚动做了处理,它会迫使如果ListView的内容大于物理视图的内容的时候,强制垂直滚动的效果,所以这里使用ScrollView和ListView混合使用是没有意义的,同理GridView
解决办法
重写GridView,让其失去滑动的特性:
代码如下:
“` python
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.GridView;
public class MenuGridView extends GridView {
public MenuGridView(Context context) {
super(context);
}
public MenuGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MenuGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if(ev.getAction() == MotionEvent.ACTION_MOVE){
return true;
}
return super.dispatchTouchEvent(ev);
}
}