Как переопределить внешний вид быстрой прокрутки Android ListView - PullRequest
2 голосов
/ 24 марта 2012

Я пытаюсь реализовать ListView с механизмом FastScroll, который использует время, а не AZ

К сожалению, я не могу найти пути к макету, используемому индексом FastScroller - кажется, он полон решимостипоказать маленький черный квадрат с очень большим белым текстом

Я посмотрел на источник:

Кажется, что оба из них показывают, что ключевые переменные-члены быстрой прокрутки являются личными, и что используемый идентификатор ресурса является фиксированным:

mOverlayDrawable = res.getDrawable(com.android.internal.R.drawable.menu_submenu_background);

Есть ли способ переопределить это?В идеале я нацеливаюсь на 2.2.и выше.

1 Ответ

1 голос
/ 25 марта 2012

Вы можете попробовать с отражением что-то вроде этого:

try {
  Field scrollerField = AbsListView.class.getDeclaredField("mFastScroller"); //java.lang.reflect.Field
  scrollerField.setAccessible(true);
  FastScroller instance = scrollerField.get(listViewInstance);

  Field overlayField = instance.getClass().getDeclaredField("mOverlayDrawable");
  overlayField.setAccessible(true);
  overlayField.set(instance, yourValueHere);
} catch (Exception e) {
  Log.d("Error", "Could not get fast scroller");
}

Я просто напечатал его, чтобы он мог или не мог компилироваться сразу, но это идея.Я не проверял, назывались ли поля одинаковыми во всех версиях, возможно, вам придется настроить.

...