У меня есть scrollview, содержащий текстовое представление в приложении для Android. Этот текст будет содержать текст, добавленный к нему непрерывно с установленными интервалами. Прокрутка работает, и текст добавляет просто отлично, но я бы хотел, чтобы scrollview автоматически прокручивался с добавлением текста. Когда новый текст добавляется внизу, он автоматически прокручивается вниз, чтобы соответствовать, и старый текст выталкивается из поля зрения вверху. Что еще лучше, так это добавить текст в нижнюю часть прокрутки и заставить его подталкивать старый текст вверх, но по одной вещи за раз.
Android scrollview autoscrolling при добавлении текста
Ответ 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"