12 votes

Scrollview ne fait pas défiler complètement vers le bas

Je suis en train de construire une application similaire à un chat qui affiche le texte que l'utilisateur saisit à l'écran en utilisant un scrollview. Ce que je fais, c'est de faire défiler automatiquement le scrollview vers le bas lorsque plus de texte est ajouté à l'écran. Je utilise

 ScrollView my_scrollview = (ScrollView) findViewById(R.id.scroller);
 my_scrollview.fullScroll(ScrollView.FOCUS_DOWN);

Cela semble fonctionner, bien que pour une raison quelconque, comme le clavier est généralement à l'écran lors de la discussion, lorsque le scrollview descend, il ne l'est pas complètement - le nouveau textview ajouté n'est pas affiché (vous devrez faire défiler manuellement vers le bas pour le voir). Comment puis-je résoudre ce problème ?

41voto

Malfunction Points 561

J'ai cherché autour de moi et j'ai trouvé que d'autres personnes ont rencontré le même problème.

J'ai résolu ce problème en utilisant ce morceau de code :

final ScrollView scrollView = (ScrollView) findViewById(R.id.scroll_view);
scrollView.post(new Runnable() {
    public void run() {
        scrollView.fullScroll(View.FOCUS_DOWN);
    }
});

J'espère que cela pourra aider quelqu'un !

15voto

Codetrix Points 347

Il est tard mais cela peut aider quelqu'un avec ce problème.. Il faut environ 200 millisecondes pour ajouter le dernier élément et le mettre à jour pour un scrollView donc cela fonctionnera sûrement.

void scrollDown()
{
    Thread scrollThread = new Thread(){
        public void run(){
            try {
                sleep(200);
                ChatActivity.this.runOnUiThread(new Runnable() {
                    public void run() {
                        myScrollView.fullScroll(View.FOCUS_DOWN);
                    }    
                });
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };
    scrollThread.start();
}

Il suffit d'appeler scrollDown(); après avoir ajouté l'élément au scrollView.

2voto

Renato Wong Points 31

J'ai fait de cette façon sur le projet Xamarin Android :

var scrollView = FindViewById (Resource.Id.scrolview);

scrollView.Post(() =>
{
    scrollView.FullScroll(FocusSearchDirection.Down);
});

Merci à l'auteur du message original.

0voto

king.web2116 Points 1
        @Override
        public void onClick(View v) {

            scview_ashora = findViewById(R.id.scview_ashora);
            scview_ashora.fullScroll(ScrollView.FOCUS_DOWN);

            scview_ashora.postDelayed(new Runnable() {
                @Override
                public void run() {
                    //remplacez cette ligne pour faire défiler vers le haut ou le bas
                    scview_ashora.fullScroll(ScrollView.FOCUS_DOWN);
                }
            }, 1000000L);

        }
    });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X