2012-04-15 74 views
6

我需要完全禁用我的列表視圖中的overscroll,這樣我才能實現我自己的overscroll功能。禁用三星Galaxy Tab 2.3.3上的listview overscroll android

只需將overscroll模式設置爲OVERSCROLL_NEVER,在查看核心listview類時似乎很簡單。這在我的三星Galaxy S2的罰款工作。但不工作對於Galaxy Tab 2.3.3.

有沒有人有三星ListView定製,可以幫助我很多經驗?

回答

2

您必須將listview的高度設置爲固定值。 如果你的內容是動態有一個很好的功能重置適配器後測量實際LISTSIZE:

public static void setListViewHeightBasedOnChildren(ListView listView) { 
    ListAdapter listAdapter = listView.getAdapter(); 
    if (listAdapter == null) { 
     // pre-condition 
     return; 
    } 

    int totalHeight = 0; 
    int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST); 
    for (int i = 0; i < listAdapter.getCount(); i++) { 
     View listItem = listAdapter.getView(i, null, listView); 
     listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED); 
     totalHeight += listItem.getMeasuredHeight(); 
    } 

    ViewGroup.LayoutParams params = listView.getLayoutParams(); 
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); 
    listView.setLayoutParams(params); 
    listView.requestLayout(); 
} 

你必須設置你的適配器後打電話到你的列表視圖作爲放慢參數此靜態方法。 你現在可以添加一個滾動視圖(裏面是你的列表視圖和其他視圖)。 我會說在2.3.3中的這種行爲是一個小錯誤......除了我描述的方式之外,沒有簡單的方法在scrollview中包含listview。 因此,他們推出了OVERSCROLL_NEVER模式:)

代碼來自DougW!

3

它爲我的三星Galaxy Tab(與Android 2.2):

try { 

    // list you want to disable overscroll 
    // replace 'R.id.services' with your list id 
    ListView listView = ((ListView)findViewById(R.id.services)); 

    // find the method 
    Method setEnableExcessScroll = 
      listView.getClass().getMethod("setEnableExcessScroll", Boolean.TYPE); 

    // call the method with parameter set to false 
    setEnableExcessScroll.invoke(listView, Boolean.valueOf(false)); 

} 
catch (SecurityException e) {} 
catch (NoSuchMethodException e) {} 
catch (IllegalArgumentException e) {} 
catch (IllegalAccessException e) {} 
catch (InvocationTargetException e) {} 
+0

輝煌!!!這真的爲我省了很多麻煩。你是怎麼知道要查找什麼方法名稱的,S2 API是公開的嗎? – npace 2013-05-17 11:45:52

相關問題