Question Faire défiler TextView sur Android


J'affiche du texte dans une vue de texte qui semble être trop longue pour tenir en un seul écran. Je dois faire défiler mon TextView. Comment puis-je faire cette?

Voici le code:

final TextView tv = new TextView(this);
tv.setBackgroundResource(R.drawable.splash);
tv.setTypeface(face);
tv.setTextSize(18);
tv.setTextColor(R.color.BROWN);
tv.setGravity(Gravity.CENTER_VERTICAL| Gravity.CENTER_HORIZONTAL);
tv.setOnTouchListener(new OnTouchListener() {
    public boolean onTouch(View v, MotionEvent e) {
        Random r = new Random();
        int i = r.nextInt(101);
        if (e.getAction() == e.ACTION_DOWN) {
            tv.setText(tips[i]);
            tv.setBackgroundResource(R.drawable.inner);
        }
        return true;
    }
});
setContentView(tv);

625
2017-11-17 13:43


origine


Réponses:


Vous n'avez pas besoin d'utiliser un ScrollView réellement.

Réglez juste le

android:scrollbars = "vertical"

propriétés de votre TextView dans le fichier xml de votre mise en page.

Ensuite, utilisez:

yourTextView.setMovementMethod(new ScrollingMovementMethod()); 

dans votre code.

Bingo, ça défile!


1418
2017-07-15 14:07



C'est comme ça que je l'ai fait purement en XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ScrollView
        android:id="@+id/SCROLLER_ID"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:scrollbars="vertical"
        android:fillViewport="true">

        <TextView
            android:id="@+id/TEXT_STATUS_ID"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1.0"/>
    </ScrollView>
</LinearLayout>

REMARQUES:

  1. android:fillViewport="true" combiné avec android:layout_weight="1.0" fera en sorte que le textview occupe tout l'espace disponible.

  2. Lors de la définition du Scrollview, NE PAS spécifier android:layout_height="fill_parent" sinon le scrollview ne fonctionne pas! (Cela m'a fait perdre une heure tout à l'heure! FFS).

ASTUCE PRO:

Pour faire défiler vers le bas par programmation après avoir ajouté du texte, utilisez ceci:

mTextStatus = (TextView) findViewById(R.id.TEXT_STATUS_ID);
mScrollView = (ScrollView) findViewById(R.id.SCROLLER_ID);

private void scrollToBottom()
{
    mScrollView.post(new Runnable()
    {
        public void run()
        {
            mScrollView.smoothScrollTo(0, mTextStatus.getBottom());
        }
    });
}

273
2017-12-16 09:16



Tout ce qui est vraiment nécessaire est le setMovementMethod (). Voici un exemple utilisant un LinearLayout.

Fichier main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView
    android:id="@+id/tv1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="@string/hello"
    />
</LinearLayout>

Fichier WordExtractTest.java

public class WordExtractTest extends Activity {

    TextView tv1;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        tv1 = (TextView)findViewById(R.id.tv1);

        loadDoc();
    }

    private void loadDoc() {

        String s = "";

        for(int x=0; x<=100; x++) {
            s += "Line: " + String.valueOf(x) + "\n";
        }

        tv1.setMovementMethod(new ScrollingMovementMethod());

        tv1.setText(s);
    }
}

117
2018-04-12 17:23



Faites votre textview en ajoutant simplement ceci

TextView textview= (TextView) findViewById(R.id.your_textview_id);
textview.setMovementMethod(new ScrollingMovementMethod());

44
2017-07-26 01:59



Il n'est pas nécessaire de mettre en

android:Maxlines="AN_INTEGER"`

Vous pouvez faire votre travail en ajoutant simplement:

android:scrollbars = "vertical"

Et, mettez ce code dans votre classe Java:

textview.setMovementMethod(new ScrollingMovementMethod());

36
2018-06-05 04:38



Tu peux soit

  1. entourer le TextView par un ScrollView; ou
  2. définir la méthode de mouvement à ScrollingMovementMethod.getInstance();.

27
2018-01-19 10:04



La meilleure façon de trouver

Remplacez le TextView avec un EditText avec ces attributs supplémentaires:

android:background="@null"
android:editable="false"
android:cursorVisible="false"

Il n'y a pas besoin d'envelopper dans un ScrollView.


17
2018-02-20 15:35