Подтвердить что ты не робот

Android scrollview autoscrolling при добавлении текста

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

4b9b3361

Ответ 1

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

Ответ 2

Я пробовал решение с помощью силы тяжести, но при прокрутке вниз было много пустого пространства под фактическим текстом.

Так что это другой способ. Вы можете разместить свой 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
        }

    }) }

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

Ответ 3

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

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

Ответ 4

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

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