0

活動開始時,我希望TextView被向下滾動到可能的最後一行。在剛剛開始的時候,將TextView自動滾動到Activity中的最後一行

現在,當Activity開始時,我看到TextView顯示頂部的文本。 如何將TextView滾動到最後一行並從底部開始顯示它?

我目前使用

@Override 
    protected void initUI(Bundle savedInstanceState) { 
     logTextView = (EditText)findViewById(R.id.text); 

     ArrayList<Event> events = getAll(); 

     StringBuilder sb = new StringBuilder(64*1024); 
     for (Event event : events) { 
      sb.append(event.toString()); 
      sb.append("\n"); 
     } 

     logTextView.setText(sb); 
     logTextView.setKeyListener(null); 
     logTextView.setFocusable(true); 
    } 

int y = (textView.getLineCount() - 1) * textView.getLineHeight(); // the " - 5" should send it to the TOP of the last line, instead of the bottom of the last line 
      int visible = logTextView.getHeight() - (2* logTextView.getLineHeight()); 
      if(visible < y) y -= visible; 
      logTextView.scrollTo(0, y); 
+0

使用logTextView.post(runnab le)runnable的run方法調用scrollTo方法 – pskink 2015-03-02 11:19:41

回答

1

將下面的代碼加到你的數據後,代碼:

final ScrollView scrollview = ((ScrollView) findViewById(R.id.scrollview)); 
scrollview.post(new Runnable() { 
    @Override 
    public void run() { 
     scrollview.fullScroll(ScrollView.FOCUS_DOWN); 
    } 
}); 
+0

這不起作用。 ScrollView中的TextView根本不起作用。 – 2015-03-02 11:43:00

+0

@ android.dk只是做我在上面的評論中提出的建議 – pskink 2015-03-02 12:07:27

0

最後我找到了解決辦法

下面是代碼

@Override 
    protected void initUI(Bundle savedInstanceState) { 
     logTextView = (EditText)findViewById(R.id.text); 

     ArrayList<Event> events = getAll(); 

     StringBuilder sb = new StringBuilder(64*1024); 
     for (Event event : events) { 
      sb.append(event.toString()); 
      sb.append("\n"); 
     } 

     logTextView.setText(sb); 
     logTextView.setKeyListener(null); 
     logTextView.setFocusable(true); 

//This line triggers textView to scroll all the way down to the bottom. 
logTextView.setSelection(logTextView.getText().length()); 
    } 
相關問題