web-dev-qa-db-fra.com

Défilement automatique de défilement Android lorsque du texte est ajouté

J'ai un scrollview contenant un textview dans une application Android. Du texte sera ajouté au texte de manière continue à des intervalles définis. Le défilement fonctionne et le texte s’ajoute très bien, mais ce que je voudrais faire, c’est que le défilement automatique de la vue de défilement descende à mesure que le texte est ajouté. Quand un nouveau texte est ajouté en bas, il défile automatiquement vers le bas pour faire correspondre l'ancien texte et est mis hors de vue en haut. Ce qui serait encore mieux, c’est d’ajouter du texte au bas de la vue à défiler et de le faire repousser l’ancien texte vers le haut, mais une chose à la fois.

21
AndroidHopeful
<ScrollView
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:fillViewport="true"
    >
    <TextView
        Android:id="@+id/statusText"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_gravity="bottom" />
</ScrollView>
18
papaiatis

J'ai essayé la solution avec la gravité, mais le résultat était beaucoup d'espace vide sous le texte même lorsque vous faites défiler l'écran vers le bas.

Donc, c'est une autre façon. Vous pouvez placer votre TextView dans ScrollView:

<ScrollView
    Android:id="@+id/scrollView1"
    Android:layout_width="match_parent"
    Android:layout_height="0dp"
    Android:layout_weight="1"
    Android:fillViewport="true" >

    <TextView
        Android:id="@+id/textView1"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content" />

</ScrollView>

Et définir addTextChangedListener

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

            //some code here

        ScrollView scrollView1 = (ScrollView) findViewById(R.id.scrollView1);
        TextView textView1 = (TextView) findViewById(R.id.textView1);
        textView1.addTextChangedListener(new TextWatcher() {

        @Override
        public void afterTextChanged(Editable arg0) {
            scrollView1.fullScroll(ScrollView.FOCUS_DOWN);
            // you can add a toast or whatever you want here
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1,
                int arg2, int arg3) {
            //override stub
        }

        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                int arg3) {
            //override stub
        }

    }) }

En fait, j'ai remarqué que l'application ferait défiler chaque fois que le texte est modifié, pas seulement ajouté. Cependant cela fonctionne très bien pour moi.

8
Kamarado

Vous pouvez simplement faire défiler la ScrollView entière vers le bas lorsque du texte est ajouté.

textView.append(text);
scroll.fullScroll(View.FOCUS_DOWN)
2
dilix
textView.append(text);
scroll.fullScroll(View.FOCUS_DOWN)

cela posera problème, cela ne défilera pas jusqu'au sommet, en raison de Android:layout_gravity="bottom"

0
sekhar