2010-05-14 18 views
14

Scrollen definierte ich eine Scrollview mit einem texteedit in meinem Layout:Scroll alawys nach unten

<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> 

I Text hinzufügen, um dieses Scrollview mit folgenden Methode:

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

Wie Sie mich sehen können Hängen Sie den Text an und versuchen Sie, bis zum Ende der ScrollView zu scrollen. Leider hat das nicht richtig funktioniert. Es scrollt nach unten, aber nicht immer, und nicht immer nach unten. Irgendwelche Hinweise?

Antwort

30

oder nach der Größenänderung in Scrollview Nutzung :

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

Das funktionierte auch für mich, aber ich habe 'postDelayed()' stattdessen verwendet, mit einer geringen Verzögerung von 20ms. – Snailer

+0

Hervorragender Hinweis! Ich benutzte scrollTo (0,0) und es tat nichts – Bostone

7

Nach den Text angehängt, versuchen Sie die Abmessungen Ihres Textview mit zu berechnen, wo Sie bewegen sollten, statt eine Konstante, wie folgt aus:

scroller.post(new Runnable() { 

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

Das funktioniert für mich. – stackoverflowuser2010

0

Für diejenigen, die Android Annotations verwenden, können Sie es wie folgt tun:

@ViewById 
ScrollView myScrollView; 

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

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