2017-08-26 13 views
2

Je fais une application de calculatrice.Défilement horizontal et mise au point sur le dernier numéro d'un TextView

J'ai un TextView où l'utilisateur écrit les nombres à élaborer.

Le TextView est à l'intérieur d'un HorizontalScrollView. Le HorizontalScrollView est à l'intérieur d'un LinearLayout vertical. Le TextView est une ligne unique, et, lorsque l'utilisateur écrit un long nombre, le nombre sort de l'écran. Le TextView doit suivre le dernier numéro ajouté par l'utilisateur, afin qu'il puisse voir les derniers numéros ajoutés sans faire défiler l'écran. Je ne veux pas d'une fonction de défilement automatique qui répète le défilement toutes les secondes, je veux seulement me concentrer sur le dernier numéro ajouté.

C'est le TextView

<HorizontalScrollView 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 

      <TextView 
       android:id="@+id/numberDisplay" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginBottom="0dp" 
       android:layout_marginLeft="8dp" 
       android:layout_marginRight="8dp" 
       android:layout_marginTop="16dp" 
       android:hint="0" 
       android:scrollHorizontally="true" 
       android:maxLines="1" 
       android:layout_gravity="right" 
       android:textSize="70sp" /> 

     </HorizontalScrollView> 

Répondre

1

Essayez ceci:

  1. Dans votre activité créer des variables pour votre point de vue de défilement et vue texte:

    TextView textView; 
    HorizontalScrollView scrollView; 
    
  2. initialisez dans onCreate() :

    scrollView = (HorizontalScrollView) findViewById(R.id.scrollView); // Add this id to xml 
    textView = (TextView) findViewById(R.id.numberDisplay); 
    
  3. Chaque fois que vous mettez à jour le texte de votre mode texte position de défilement de mise à jour de la vue de défilement:

    scrollView.scrollTo(textView.getRight(), textView.getTop()); 
    

Mise à jour: j'ai réalisé que si vous appelez textView.setText(...) puis immédiatement scrollView.scrollTo(...) il ne fonctionne pas car la taille de l'affichage du texte n'est pas mise à jour immédiatement. Vous devriez plutôt mettre à jour la position de scoll comme ceci:

scrollView.post(new Runnable() { 
     @Override 
     public void run() { 
      scrollView.scrollTo(textView.getRight(), textView.getTop()); 
     } 
    });