今天项目使用到ScrollView嵌套HorizontalScrollView,ScrollView里包括GridView,发现几个问题非常经典。在此记录:
问题1.ScrollView嵌套HorizontalScrollView跳变问题。ScrollView、HorizontalScrollView自己主动下拉到最后一行;
设置到初始坐标(0,0)解决方法:
(时机:数据解析完而且刷新notifyDataSetChanged()之后进行以下代码设置)
scrollview.smoothScrollTo(0, 0);
horizontalscrollview.fullScroll(ScrollView.FOCUS_LEFT);
注意:
这两行代码无法达到效果( scrollview.fullScroll(ScrollView.FOCUS_UP);horizontalscrollview.fullScroll(ScrollView.FOCUS_LEFT); )
问题2.ScrollView与GridView冲突,GridView无法显示全部数据和滑动。
方法1)GridView假设知道行数大小能够直接给定高度,可是一般数据都是不固定的。所以仅仅需在getView()进行简单的设置就可以解决这个问题:
Collections.sort(arraylist);//依据解析数据自己定义高度数据放在集合里并升序排列
LinearLayout.LayoutParams lp2 =(android.widget.LinearLayout.LayoutParams) gridview.getLayoutParams();
lp2.height=arraylist.get(arraylist.size()-1);//高度取升序集合里最大的高度即最后一位
gridview.setLayoutParams(lp2);
方法2)自己定义控件实现可滑动:
public class GridView4ScrollView extends GridView {
public GridView4ScrollView(Context context) {
super(context);
}
public GridView4ScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public GridView4ScrollView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}
@Override//ScrollView嵌套GridView
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(
Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
other:其他控件測量getViewTreeObserver()
1
2
3
4
5
6
7
8
9
|
ViewTreeObserver
vto = imageView.getViewTreeObserver(); vto.addOnGlobalLayoutListener( new OnGlobalLayoutListener()
{ @Override public
void
onGlobalLayout() { imageView.getViewTreeObserver().removeGlobalOnLayoutListener( this ); imageView.getHeight(); imageView.getWidth(); } }); |