2012-04-15 2 views
6

Мне нужно полностью отключить чрезмерную прокрутку в своих списках, чтобы я мог реализовать свою собственную функцию сверхпрокрутки.Отключить просмотр списка прокрутки на вкладке Samsung Galaxy 2.3.3 android

Кажется, достаточно просто взглянуть на основные классы списка, просто установив режим overscroll в OVERSCROLL_NEVER. Это прекрасная работа на моей Samsung Galaxy s2. Но не работает Galaxy Tab 2.3.3.

У кого-нибудь был большой опыт работы с настройками Samsung ListView, которые могут мне помочь?

ответ

2

Вы должны установить высоту списка в значение fix. Если содержание динамически есть хорошая функция для измерения фактического 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(); 
} 

вы должны вызвать этот статический метод с вашей ListView как после параметра Я настройки адаптера. Теперь вы можете добавить scrollview (внутри - ваш список и другие виды). Я бы сказал, что это поведение в 2.3.3 раньше было небольшой ошибкой ... нет простого способа включить список в прокрутку, кроме того, как я описал. По этой причине они внедрили режим OVERSCROLL_NEVER :)

Код от DougW!

3

Он работал для меня на Samsung 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

Brilliant !!! Это действительно спасло меня от хлопот. Как вы узнали, какое имя метода искать, является ли S2 API общедоступным? – npace

Смежные вопросы