2013-02-10 79 views
10

我正在构建一个类似聊天的应用程序,用于显示用户使用滚动视图输入到屏幕的文本。我正在做的是随着更多文本被添加到屏幕上,自动滚动滚动视图。我使用滚动查看不完全向下滚动

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

这似乎是工作,但由于某种原因,因为键盘通常是在屏幕上一边聊天,当滚动视图向下滚动它并不能完全 - 没有显示增加了最新的TextView(你必须手动向下滚动到最新的)。我该如何解决这个问题?

回答

24

我环顾四周,发现一些other people已经遇到了同样的问题。

我使用的代码这一块解决了这个问题:

final ScrollView scrollView = (ScrollView) findViewById(R.id.scroll_view); 

scrollView.post(new Runnable() 
{ 
    public void run() 
    { 
     scrollView.fullScroll(View.FOCUS_DOWN); 
    } 
}); 

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

+0

嘿我我面临同样的问题,但无法通过尝试你的代码解决......你能帮助吗? – nidhi 2013-09-05 11:08:20

+0

太棒了!这100%的作品! – 2013-10-31 10:35:05

+0

那也适合我,很好的回答 – 2016-02-22 18:40:02

12

它的后期,但可能会帮助这个问题的一些.. 它需要大约200毫秒添加最后一个元素,并更新为一个scrollView所以这一定会工作。

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

在向scrollView添加元素后,请致电scrollDown();

+4

你也可以使用'my_scrollview.postDelayed(new Runnable(){...},200)' – Wirling 2015-05-04 12:13:17