2014-02-12 58 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")