2011-03-07 135 views
20

我有一个包含Android应用中的文本视图的滚动视图。该文本视图将以设定的时间间隔连续添加文本。滚动工作和文本添加得很好,但我想要做的是滚动视图自动向下滚动,因为文本被添加。随着新文本被添加到底部,它会自动向下滚动以匹配,并且旧文本被排除在顶部。更好的办法是在滚动视图的底部添加文本,并让它向上推动旧文本,但一次只能推送一个文本。添加了文本的Android滚动视图自动滚动

+2

那么......无视这一点。傻傻的我没有把重力设置在textview(而不是scrollview)上的“底部”。这样做会将新文本保留在底部并滚动以符合新文本。好极了! – AndroidHopeful 2011-03-07 20:32:28

+3

您可以在答案中写下您的解决方案,然后将其标记为已选。当其他人遇到同样的问题时,他们会看到有解决方案。 – Shade 2011-03-08 00:10:35

+2

这是一个很酷的解决方案,你应该把它作为答案。 – 2011-06-09 13:50:22

回答

20
<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> 
+0

谢谢,这对我有用。 – BostonGeorge 2013-12-16 01:16:14

2

添加文本时,您可以将整个ScrollView滚动到底部。

textView.append(text); 
scroll.fullScroll(View.FOCUS_DOWN) 
+0

不要忘了打电话给fullScroll里面scroll.post电话 – 2014-07-18 15:48:51

1
textView.append(text); 
scroll.fullScroll(View.FOCUS_DOWN) 

这会给问题,它不会滚动高达极端的顶部,由于android:layout_gravity="bottom"

+0

辉煌的解决方案,谢谢 – 2014-08-19 12:35:42

+0

这应该被标记为答案。 – busuu 2017-03-03 02:32:42

6

我试着重力解决方案,但结果是在实际文本有很多空的空间当滚动到底部。

所以这是另一种方式。您可以将您的TextView滚动型的内部:

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

,并定义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 
     } 

    }) } 

其实我注意到现在应用程序将每滚动文本改变时,不只是增加。然而,它对我来说工作得很好。

+0

这是唯一适合我的(API 23)。 'android:layout_gravity =“bottom”'技巧让我无法手动向上滚动,并在文本下方添加了大量空白空间。这一个没有添加空的空间,并允许正常滚动。 – Shlublu 2016-11-14 16:15:14