Android ScrollView嵌套HorizontalScrollView 滑動問題 ScrollView包括GridView顯示問題


今天項目使用到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();
        }   
  });



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM