2013-07-17 53 views
1

我已經創建了一個控制器來添加一個視圖到ListView.addHeaderView(...),它將管理一部分頭部以堅持ListView的頂部。我如何做到這一點是通過讓控件監視OnScrollListener來確定頭部的哪一部分位於ListView的頂部,然後從頭部刪除Pinnable視圖並將其添加到ListView的父視圖的頂部。Android調整ListView的ScrollBar的頂部位置

這個工作完全如我所期望的ListView右側的滾動條豁免將落在我固定到ListView頂部的視圖後面。我需要讓該欄偏離固定視圖的高度。

有沒有辦法調整ScrollBar的頂部開始?

我感謝任何和所有的幫助。謝謝!

回答

1

這似乎工作確定:這是ListView.computeVerticalScrollOffset的副本兩個改變:

  • 子類ListView,修改您的佈局中使用你的子類
  • 複製ListView.computeVerticalScrollOffset到您的自定義ListView
  • 更換成員變量引用與獲取者(見下文)
  • 修改偏移方法以說明您想要使用的調整(請參閱下文)

YourListView.java

@Override 
protected int computeVerticalScrollOffset() { 
    final int firstPosition = getFirstVisiblePosition(); 
    final int childCount = getChildCount(); 
    if (firstPosition >= 0 && childCount > 0) { 
     if (isSmoothScrollbarEnabled()) { 
      final View view = getChildAt(0); 
      final int top = view.getTop(); 

      int height = view.getHeight(); 
      if (height > 0) { 

       // The core of the change is here (mHeaderRowHeight) 
       return Math.max(firstPosition * 100 - (top * 100)/height + 
         (int) ((float) (getScrollY() + mHeaderRowHeight)/(getHeight() + mHeaderRowHeight) * getCount() * 100), 0); 
      } 
     } else { 
      int index; 
      final int count = getCount(); 
      if (firstPosition == 0) { 
       index = 0; 
      } else if (firstPosition + childCount == count) { 
       index = count; 
      } else { 
       index = firstPosition + childCount/2; 
      } 
      return (int) (firstPosition + childCount * (index/(float) count)); 
     } 
    } 
    return 0; 
} 
相關問題