J'ai un scrollview contenant un textview dans une application Android. Du texte sera ajouté au texte de manière continue à des intervalles définis. Le défilement fonctionne et le texte s’ajoute très bien, mais ce que je voudrais faire, c’est que le défilement automatique de la vue de défilement descende à mesure que le texte est ajouté. Quand un nouveau texte est ajouté en bas, il défile automatiquement vers le bas pour faire correspondre l'ancien texte et est mis hors de vue en haut. Ce qui serait encore mieux, c’est d’ajouter du texte au bas de la vue à défiler et de le faire repousser l’ancien texte vers le haut, mais une chose à la fois.
<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>
J'ai essayé la solution avec la gravité, mais le résultat était beaucoup d'espace vide sous le texte même lorsque vous faites défiler l'écran vers le bas.
Donc, c'est une autre façon. Vous pouvez placer votre TextView dans 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>
Et définir 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
}
}) }
En fait, j'ai remarqué que l'application ferait défiler chaque fois que le texte est modifié, pas seulement ajouté. Cependant cela fonctionne très bien pour moi.
Vous pouvez simplement faire défiler la ScrollView
entière vers le bas lorsque du texte est ajouté.
textView.append(text);
scroll.fullScroll(View.FOCUS_DOWN)
textView.append(text);
scroll.fullScroll(View.FOCUS_DOWN)
cela posera problème, cela ne défilera pas jusqu'au sommet, en raison de Android:layout_gravity="bottom"