2012-11-13 166 views
15

我有一個ListView滾動屏幕的元素數量。如何將空白空間添加到ListView的末尾?

我想在那裏有視圖結尾的空白處。也就是說,用戶應該能夠滾動瀏覽最後一個元素,使得最後一個元素位於視口的中間。

我可以使用OverScroller,但我認爲這隻會使視圖具有像iPhone上經常看到的彈性效果。

有沒有我可能忽略的東西?

的滾動到最鈕屏幕應該是這個樣子: Android mockup where there are a number of labels the last of which is near the middle of the screen

+0

任何我能想到的將是一個黑客,因爲列表視圖不工作的方式......但你可以在如果列表中getView調整最後視線的高度位置== count - 1. – JustinMorris

回答

15
  1. 虛增您選擇的任何佈局(這可能是一個XML和ImageView的,沒有繪製,並與設定的高度和您所選擇的寬度)
  2. 測量屏幕高度,創造新的LayoutParams和它的高度設置爲屏幕高度
  3. 設置你的膨脹視圖
  4. 使用ListView的0新的佈局則params的1/方法給視圖添加到列表的底部(也有一個addHeaderView()

代碼來衡量屏幕高度

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
Display display = wm.getDefaultDisplay(); 
int screenHeight = display.getHeight(); 

代碼來設置半屏幕高度:

View layout = inflater.inflate(R.layout.mylistviewfooter, container, false); 
ViewGroup.LayoutParams lp = layout.getLayoutParams(); 
lp.height = screenHeight/2; 
layout.setLayoutParams(lp); 
myListView.addFooterView(layout); 

另存爲: 將腳註或標題視圖添加到任何列表視圖時,必須在添加適配器之前完成。另外,如果你需要做這之後,讓您的適配器類,你需要知道調用ListView的適配器通過getAdapter()將返回HeaderViewListAdapter中,你將需要調用它的getWrappedAdapter方法 事情是這樣的一個實例:

MyAdapterClassInstance myAdapter = (MyAdapterClassInstance) ((HeaderViewListAdapter) myListView.getAdapter()).getWrappedAdapter(); 
+0

使頁腳成爲屏幕的一半。 – neworld

+0

ahh,編輯回答更多代碼。 – petey

+0

@neworld我希望這可以幫助你!:) – petey

-3

嘗試如下:

View footer = new View(getActivity()); 
footer.setLayoutParams(new AbsListView.LayoutParams(LayoutParams.FILL_PARENT, 100)); 
// 100 is the height, you can change it. 
mListView.addFooterView(footer, null, false); 
41

接受的答案是太複雜了,而且addFooterView不是這種事情。正確和簡單的方法是設置paddingTop和paddingBottom,並且您需要將clipToPadding設置爲「false」。在您的列表視圖或網格視圖中,添加以下內容:

android:paddingTop="100dp" 
    android:paddingBottom="100dp" 
    android:clipToPadding="false" 

你會得到在頂部和空白的空間,用手指滾動移動底部。

+0

是的,這很簡單 – DayDayHappy

+1

這是更好的答案。 – ootinii

+4

有人發現,如果你觸摸填充ListView不滾動?在我的情況下,填充可能高達屏幕高度的2/3,所以這對我不起作用。除非有人知道如何讓它滾動? – darnmason

0

這100%的作品。 適配器設置你這樣的代碼

//in getCount 
    @Override 
    public int getCount() { 
    return ArrayList.size()+1; 
     } 
    //in getview make your code like this 
    public View getView(final int i, View view, ViewGroup viewGroup) { 

    view = inflter.inflate(R.layout.yourlayout, null); 

    if(i<getCount()-1) { 
    //your code 
    } 
    else{ 
    ViewGroup itemContainer =(ViewGroup) view.findViewById(R.id.container); 
       itemContainer.setVisibility(View.INVISIBLE); 
    } 

    Return view; 
    } 
相關問題