2010-02-10 9 views
20

Ho un TextView a schermo intero con una spanning lunga che richiede lo scorrimento. Il getLineCount di TextView() mi dà il numero totale di linee utilizzate per l'intero blocco di testo, ma mi piacerebbe sapere quante righe di testo sono attualmente visibili sullo schermo.Esiste un modo per recuperare il conteggio o l'intervallo di righe visibili di un TextView?

O, meglio ancora, c'è un modo per capire l'intervallo di linee attualmente visibili sullo schermo? Ad esempio, mentre scorre la vista, posso dire che le righe 20-60 sono attualmente visibili?

risposta

29

ho capito la risposta:

int height = myTextView.getHeight(); 
int scrollY = myTextView.getScrollY(); 
Layout layout = myTextView.getLayout(); 

int firstVisibleLineNumber = layout.getLineForVertical(scrollY); 
int lastVisibleLineNumber = layout.getLineForVertical(scrollY+height); 
+2

'getLayout()' restituisce NULL –

+1

@MrSuS restituisce null se si desidera recuperarlo prima che View fosse disposto. –

+2

Ho provato a utilizzare il codice sopra menzionato ma restituisce il numero di righe errato quando si utilizza l'orientamento orizzontale. Sono visibili anche alcune linee parziali. – user2538359

4

per farli funzionare è necessario scrivere il codice pubblicato da @ Robert in questo modo:

ViewTreeObserver vto = txtViewEx.getViewTreeObserver(); 
     vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
      @Override 
      public void onGlobalLayout() { 
       ViewTreeObserver obs = txtViewEx.getViewTreeObserver(); 
       obs.removeOnGlobalLayoutListener(this); 
       height = txtViewEx.getHeight(); 
       scrollY = txtViewEx.getScrollY(); 
       Layout layout = txtViewEx.getLayout(); 

       firstVisibleLineNumber = layout.getLineForVertical(scrollY); 
       lastVisibleLineNumber = layout.getLineForVertical(height+scrollY); 

      } 
     }); 
Problemi correlati