2011-04-04 8 views
9

¿Alguien sabe de una manera de centrar ListView en función de su selección o conjunto de selección actual con setSelection?Centre a ListView en su selección actual

vi esta otra pregunta StackOverflow sin respuestas: Android ListView center selection

Gracias, Kevin

+0

Hola, me puede ayudar con esto .. Tengo un ListView que tiene sólo 5 artículos en ella y por lo tanto el ListView no se desplaza. Pero quiero establecer el elemento seleccionado al centro, y smoothScrollByOffset (int offset) no parece funcionar. –

Respuesta

3

No he probado nada de esto, pero sobre la base de la selección actual podría utilizar public void smoothScrollByOffset (int offset) para obtener la vista para desplazarse al lugar que desee para que su selección esté en el medio de la vista?

18

Primero, obtenga la altura del ListView usando getHeight, que devuelve el alto del ListView en píxeles.

A continuación, obtenga la altura de la Vista de la fila con el mismo método.

Luego, use setSelectionFromTop y pase la mitad de la altura de ListView menos la mitad de la altura de la fila.

Algo así como:

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

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

O, en vez de hacer los cálculos, es posible que sólo debes elegir una constante para el desplazamiento desde la parte superior, pero yo creo que podría ser más frágiles en diferentes dispositivos desde el segundo argumento para setSelectionFromTop parece estar en píxeles en lugar de píxeles independientes del dispositivo.

No he probado este código, pero debería funcionar siempre que sus filas tengan aproximadamente la misma altura.

+0

funcionó para mí ... –

4

Deberá tener la vista de desplazamiento y la vista del elemento seleccionado. Entonces sólo tiene que hacer:

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

Esto centrará la vista de desplazamiento exactamente en selectedView

Cuestiones relacionadas