2014-02-12 59 views
1

我已經嘗試了很多不同的方式,這裏找到的大部分建議,但都沒有人似乎工作。我想要實現的是在我的遊戲區域下方的一個SurfaceView聊天區域。它應該向上滾動,因爲新行被添加到textview。Android中的自動滾動textview

首先,它看起來像一個非常簡單的任務,但嘗試了各種建議,如ScrollView中的TextView,比如ScrollView中TableLayout中TableRow中的TextView,等等...... I還沒有發生。當然,這必須在Android中輕鬆實現,對嗎?

任務是在屏幕底部顯示6行文本,並且隨着最後添加新消息,它應該向上滾動其餘部分,如終端窗口。重要的是,它應該在最後一條消息之後添加最新消息,並在到達最後一行時向上滾動文本並在最後添加新行。

任何形式的幫助或建議將不勝感激!

+0

你試過[這](http://stackoverflow.com/questions/10326397/auto-向下滾動文字#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")