2011-03-07 8 views
20

Android 앱에서 textview가 포함 된 scrollview가 있습니다. 이 텍스트 뷰에는 설정된 간격으로 텍스트가 계속 추가됩니다. 스크롤 작업과 텍스트를 잘 추가 할 수 있지만 텍스트를 추가 할 때 scrollview autoscroll을 할 일을하고 싶습니다. 하단에 새 텍스트가 추가되면 자동으로 아래로 스크롤되어 일치하고 오래된 텍스트는 상단에서 보이지 않게 밀려납니다. 더 나은 방법은 스크롤 뷰의 아래쪽에 텍스트를 추가하고 이전 텍스트를 위쪽으로 밀어 넣는 것입니다.하지만 한 번에 하나씩 올리십시오.Android scrollview 텍스트로 자동 스크롤이 추가되었습니다.

+2

음 ... 무시하십시오. 어리석은 내가 처음부터 텍스트 뷰 (스크롤 뷰가 아닌)에 "아래"중력을 설정하지. 이렇게하면 새 텍스트가 맨 아래에 유지되고 스크롤되어 새 텍스트가 표시됩니다. 예! – AndroidHopeful

+3

답변에 귀하의 솔루션에 관해 쓸 수 있으며 선택한 것으로 표시 할 수 있습니다. 그런 식으로 다른 사람들이 같은 문제를 겪을 때 그들은 해결책이 있다는 것을 알게 될 것입니다. – Shade

+2

멋진 솔루션이며 답변으로 게시해야합니다. –

답변

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

2

텍스트를 추가 할 때 ScrollView 전체를 간단하게 스크롤 할 수 있습니다.

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

scroll.post 호출 내에서 fullScroll을 호출하는 것을 잊지 마십시오. –

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

이 문제를 줄 것이다, 그것은 극단적 인 최고 개까지 스크롤되지 않습니다 인해에 android:layout_gravity="bottom"

+0

멋진 솔루션, 감사합니다. –

+0

답변으로 표시되어야합니다. – busuu

6

나는 중력 솔루션을 시도했지만 결과는 실제 텍스트 아래에 빈 공간을 많이했다 아래로 스크롤 할 때.

그래서 다른 방법입니다.

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

을 그리고

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 
     } 

    }) } 

는 사실 내가 응용 프로그램이 텍스트가 변경 될 때마다, 방금 추가하지 스크롤 것을 지금 발견 addTextChangedListener

을 정의 : 당신은있는 ScrollView의 내부에 텍스트 뷰를 배치 할 수 있습니다. 그러나 그것은 나를 위해 잘 작동합니다.

+0

나를 위해 작동하는 것은이 하나뿐입니다 (API 23). 'android : layout_gravity = "bottom" "트릭 때문에 수동으로 위로 스크롤 할 수 없게되었고 텍스트 아래에 빈 공간이 많이 추가되었습니다. 빈 공간을 추가하지 않고 정상적으로 스크롤 할 수 있습니다. – Shlublu

관련 문제