12

我正在构建一个类似聊天的应用程序,它使用滚动视图将用户输入的文本显示到屏幕上。我正在做的是在屏幕上附加更多文本时自动向下滚动滚动视图。我正在使用

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

这似乎可行,尽管出于某种原因,因为键盘通常在聊天时出现在屏幕上,当滚动视图向下滚动时它并不完全 - 不显示添加的最新文本视图(您必须手动向下滚动到最新的一)。我该如何解决这个问题?

4

4 回答 4

40

我环顾四周,发现其他一些人也遇到了同样的问题。

我使用这段代码解决了这个问题:

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

希望这可以帮助那里的人!

于 2013-02-15T15:20:22.983 回答
15

它迟到了,但可能会帮助一些人解决这个问题。添加最后一个元素并为滚动视图更新它需要大约 200 微秒,所以这肯定会起作用。

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();
}

只需scrollDown();在将元素添加到滚动视图后调用。

于 2013-08-03T20:36:38.103 回答
2

在 Xamarin Android 项目上这样做了:

var scrollView = FindViewById<ScrollView>(Resource.Id.scrolview); 

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

感谢OP。

于 2021-09-27T20:50:29.190 回答
0
        @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() {
                    //replace this line to scroll up or down
                    scview_ashora.fullScroll(ScrollView.FOCUS_DOWN);
                }
            }, 1000000L);


        }
    });
于 2018-10-17T20:00:58.730 回答