2010-05-14 25 views
14

ho definito uno ScrollView con un texteedit nel mio layout:ScrollView alawys scorrimento verso il basso

<ScrollView android:fillViewport="true" 
    android:layout_marginBottom="50dip" 
    android:id="@+id/start_scroller" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:fadingEdge="none"> 
<TextView 
    android:id="@+id/text" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 
</TextView> 
</ScrollView> 

aggiunge del testo a questo ScrollView con il seguente metodo:

public void writeToLogView(String textMsg) { 
    if (text.getText().equals("")) { 
     text.append(textMsg); 
    } else { 
    text.append("\n" + textMsg); 
    scroller.scrollBy(0, 1000000); 
    } 
} 

Come si può vedere i aggiungi il testo e prova a scorrere fino alla fine di ScrollView. Sfortunatamente questo non ha funzionato correttamente. Scorre verso il basso, ma non sempre, e non sempre verso il basso. Qualche suggerimento?

risposta

30

O dopo il cambio di dimensioni di visualizzazione in uso ScrollView :

scroller.post(new Runnable() { 
    public void run() { 
     scroller.fullScroll(ScrollView.FOCUS_DOWN); 
    } 
}); 
+2

Questo ha funzionato anche per me, ma ho usato 'postDelayed()' invece, con un ritardo basso come 20ms. – Snailer

+0

Suggerimento eccellente! Stavo usando scrollTo (0,0) e non stava facendo nulla – Bostone

7

Dopo aggiungendo il testo, provare a utilizzare le dimensioni del vostro TextView per calcolare dove si dovrebbe scorrere fino, al posto di una costante, in questo modo:

scroller.post(new Runnable() { 

    public void run() { 
     scroller.scrollTo(text.getMeasuredWidth(), text.getMeasuredHeight()); 
    } 
}); 
+0

Questo funziona per me. – stackoverflowuser2010

0

Per coloro che utilizzano Android Annotations, si può fare in questo modo:

@ViewById 
ScrollView myScrollView; 

@AfterViews 
protected void init() { 
    scrollToEnd(); 
} 

@UiThread(delay=200) 
void scrollToEnd() { 
    myScrollView.fullScroll(ScrollView.FOCUS_DOWN); 
} 
Problemi correlati