2014-02-12 2 views
1

Я пробовал много разных способов, большинство предложений найдено здесь, но ни один из них, похоже, не работает. То, что я пытаюсь достичь, находится в области чата ниже моей игровой зоны, SurfaceView. Предполагается, что он будет прокручиваться вверх, когда в текстовое окно добавляются новые строки.Автопрокрутка textview в Android

Во-первых, это действительно простая задача, но, попробовав все виды предложений, таких как TextView в ScrollView, как TextView в TableRow в TableLayout в ScrollView и так далее ... I до сих пор не произошло. Конечно, это должно быть что-то легко достигнутое в Android, правильно?

Задача состоит в том, чтобы отобразить как 6 строк текста в нижней части экрана, а когда новое сообщение добавлено последним, оно должно прокрутить остальные вверх, как окно терминала. Важно то, что он должен добавить последнее сообщение за другим и, когда достигнут нижней строки, прокрутите текст вверх и добавьте новую строку (строки) в конец.

Любая помощь или предложения были бы высоко оценены!

+0

вы пробовали [это] (http://stackoverflow.com/questions/10326397/auto- scroll-down-on-textviews # 10333073) –

ответ

1

мне нужно было такое же поведение в одном из моих приложений, и я достиг всего одной командой:

view.setGravity(Gravity.BOTTOM); 

Или, аналогично, установка этого атрибута в макете:

android:gravity="bottom" 

Тогда просто добавить свои строки с помощью:

your_text_view.append(newLine); 
+0

Так просто! Большое спасибо! – Willis

0

Предположим, вы объявили о своей Sc rollView следующим образом ...

private ScrollView mScrollView; 

вы инициализируется как ...

mScrollView = (ScrollView) findViewById(R.id.scroll_view_chat_window); 

Теперь создайте метод для выполнения прокрутки вниз при вызове метода. Внутри метода реализуется поток, который будет выполнять прокрутку вниз независимо. И вызовите метод после каждого обновления сообщения чата, которое будет выполнять функцию auto-srcoll.

private void scrollDown() { 

    mScrollView.post(new Runnable() { 
     @Override 
     public void run() { 
      mScrollView.smoothScrollTo(mScrollView.getScrollY(), mScrollView.getScrollY() 
        + mScrollView.getHeight()); 
     } 
    }); 
} 
0

Я достиг этого (грубо!), Сохраняя свой собственный список, удаляя наименьший элемент, то добавление в конце каждый раз. Вот я только что получил окно в 3 строки:

public class MessageWindow { 

private ArrayList <String> msgs; 
private Activity parentActivity; 

public MessageWindow(Activity act, int allMsgsMax) { 
    this.parentActivity = act; 

    msgs = new ArrayList <String>(); 
      // create empty list elements for initial display 
    for (int i = 0; i < allMsgsMax; i++){ 
     msgs.add(""); 
    } 
} 

// 
public void put (String msg){ 

    msgs.remove(0); 
    msgs.add(msg); 

    // get a handle to the textview 'messages', a 3-line box 
    TextView t2v = (TextView) parentActivity.findViewById(R.id.messages); 

    // crappy but you get the idea: 
    t2v.setText(msgs.get(0) + "\n" + msgs.get(1) + "\n" + msgs.get(2)); 
} 

затем в деятельности:

protected MessageWindow messageWindow; 

    // setup splash screen 
    messageWindow = new MessageWindow(this, 3); 

    // write some stuff - row1 will disappear off the top of the box 
    messageWindow.put ("row1") 
    messageWindow.put ("row2") 
    messageWindow.put ("row3") 
    messageWindow.put ("row4") 
Смежные вопросы