Центрировать ListView в текущем выборе

Кто-нибудь знает способ центрирования ListView на основе его текущего выбора или выбора с помощью setSelection?

Я видел этот другой вопрос StackOverflow без каких-либо ответов: Выбор центра Android ListView

Спасибо, Кевин

Ответ 1

Я не пробовал ничего из этого, но на основе текущего выбора вы могли бы использовать public void smoothScrollByOffset (int offset), чтобы просмотреть прокрутку туда, где вы хотите, чтобы ваш выбор находился посредине представления?

Ответ 2

Сначала получите высоту ListView с помощью getHeight, которая возвращает высоту ListView в пикселях.

Затем получим высоту строки View, используя тот же метод.

Затем используйте setSelectionFromTop и пропустите половину высоты ListView минус половина высоты строки.

Что-то вроде:

int h1 = mListView.getHeight();
int h2 = v.getHeight();

mListView.setSelectionFromTop(position, h1/2 - h2/2);

Или вместо выполнения математики вы можете просто выбрать константу для смещения сверху, но я думаю, что она может быть более хрупкой на разных устройствах, поскольку второй аргумент для setSelectionFromTop выглядит как пиксель, а не устройство независимых пикселей.

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

Ответ 3

Вам нужно будет иметь вид прокрутки и вид выбранного элемента. Тогда вы можете просто сделать:

scrollView.smoothScrollTo(0, selectedView.getTop() - (scrollView.getHeight() / 2) + (selectedView.getHeight() / 2), 0);

Это позволит центрировать прокрутку в точности на выбранном элементе