Автопрокрутка в Android Scrollview по мере добавления текста - PullRequest
23 голосов
/ 07 марта 2011

У меня есть прокрутка, содержащая текстовое представление в приложении для Android.К этому текстовому обзору будет добавляться текст непрерывно с установленными интервалами.Прокрутка работает, и текст добавляется просто отлично, но я хотел бы сделать так, чтобы прокрутка автоматически прокручивалась вниз при добавлении текста.Когда новый текст добавляется внизу, он автоматически прокручивается вниз, чтобы соответствовать, а старый текст исчезает из поля зрения сверху.Что было бы еще лучше, так это добавить текст в конец прокрутки и заставить его выдвигать старый текст вверх, но по одной вещи за раз.

Ответы [ 4 ]

18 голосов
/ 07 июля 2011
<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>
9 голосов
/ 08 ноября 2013

Я пробовал решение с гравитацией, но в результате было получено много пустого пространства под реальным текстом при прокрутке вниз.

Так что это другой способ.Вы можете разместить свой TextView внутри ScrollView:

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

    }) }

На самом деле я заметил, что приложение будет прокручиваться при каждом изменении текста, а не просто добавляться,Однако у меня все работает отлично.

2 голосов
/ 11 февраля 2013

При добавлении текста вы можете просто прокрутить все ScrollView вниз.

textView.append(text);
scroll.fullScroll(View.FOCUS_DOWN)
0 голосов
/ 14 марта 2013
textView.append(text);
scroll.fullScroll(View.FOCUS_DOWN)

это создаст проблему, оно не прокрутится до экстремальной вершины из-за android:layout_gravity="bottom"

...