Кто-нибудь знает способ центрирования ListView на основе его текущего выбора или выбора с помощью setSelection?
Я видел этот другой вопрос StackOverflow без каких-либо ответов: Выбор центра Android ListView
Спасибо, Кевин
Кто-нибудь знает способ центрирования ListView на основе его текущего выбора или выбора с помощью setSelection?
Я видел этот другой вопрос StackOverflow без каких-либо ответов: Выбор центра Android ListView
Спасибо, Кевин
Я не пробовал ничего из этого, но на основе текущего выбора вы могли бы использовать public void smoothScrollByOffset (int offset)
, чтобы просмотреть прокрутку туда, где вы хотите, чтобы ваш выбор находился посредине представления?
Сначала получите высоту ListView с помощью getHeight, которая возвращает высоту ListView в пикселях.
Затем получим высоту строки View, используя тот же метод.
Затем используйте setSelectionFromTop и пропустите половину высоты ListView минус половина высоты строки.
Что-то вроде:
int h1 = mListView.getHeight();
int h2 = v.getHeight();
mListView.setSelectionFromTop(position, h1/2 - h2/2);
Или вместо выполнения математики вы можете просто выбрать константу для смещения сверху, но я думаю, что она может быть более хрупкой на разных устройствах, поскольку второй аргумент для setSelectionFromTop выглядит как пиксель, а не устройство независимых пикселей.
Я не тестировал этот код, но он должен работать до тех пор, пока ваши строки будут примерно одинаковой высоты.
Вам нужно будет иметь вид прокрутки и вид выбранного элемента. Тогда вы можете просто сделать:
scrollView.smoothScrollTo(0, selectedView.getTop() - (scrollView.getHeight() / 2) + (selectedView.getHeight() / 2), 0);
Это позволит центрировать прокрутку в точности на выбранном элементе