907 Stimmen

TextView unter Android scrollbar machen

Ich zeige Text in einer TextView an, der zu lang zu sein scheint, um in einen Bildschirm zu passen. in einen Bildschirm zu passen. Ich muss meine TextView scrollbar machen. Wie kann ich das das?

Hier ist der 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);

2001voto

Amit Chintawar Punkte 19808

Sie müssen nicht mit einem ScrollView tatsächlich.

Stellen Sie einfach die

android:scrollbars = "vertical"

Eigenschaften Ihrer TextView in der xml-Datei Ihres Layouts.

Dann verwenden Sie:

yourTextView.setMovementMethod(new ScrollingMovementMethod());

in Ihrem Code.

Bingo, es blättert!

105 Stimmen

Aber sicher maxLines erfordert die Eingabe einer beliebigen Zahl; das funktioniert nicht bei jeder Bildschirmgröße und Schriftgröße? Ich finde es einfacher, es einfach mit einem ScrollView Das bedeutet, dass ich keine weiteren XML-Attribute oder Code (wie z. B. die Einstellung der Bewegungsmethode) hinzufügen muss.

14 Stimmen

@Christopher, ScrollView benötigt auch 'Android:layout_height'.

12 Stimmen

@Regex: Nun ja. Entweder du lässt die ScrollView so viel Platz einnehmen, wie er benötigt (z. B. über die android:fillViewport Attribut), oder Sie legen die gewünschte Größe fest. Verwendung von maxLines sollte nicht verwendet werden, um die Größe von UI-Elementen festzulegen, daher ist dies keine Lösung.

341voto

Someone Somewhere Punkte 22958

So habe ich es rein in XML gemacht:

<?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>

ANMERKUNGEN:

  1. android:fillViewport="true" kombiniert mit android:layout_weight="1.0" wird die Textansicht den gesamten verfügbaren Platz einnehmen.

  2. Wenn Sie die Scrollview definieren, geben Sie NICHT android:layout_height="fill_parent" sonst funktioniert die Bildlaufansicht nicht! (Das hat mich gerade eine Stunde gekostet! FFS).

PRO TIPP:

Um nach dem Anhängen von Text programmatisch nach unten zu blättern, verwenden Sie dies:

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());
        }
    });
}

13 Stimmen

Es ist nicht nötig, die mTextView.getBottom() verwenden Sie einfach die Methode mScrollView.fullScroll(View.FOCUS_DOWN) da es ein Teil der ScrollView-API ist. Siehe ici y ici für weitere Informationen.

9 Stimmen

Android warnt, dass entweder die LinearLayout oder die ScrollView kann in diesem Beispiel nutzlos sein (ich habe die LinearLayout vollständig). Sie warnt auch davor, dass für die TextView sollte es sein android:layout_height="wrap_content" um die ScrollView . Diese Warnungen können auf die 3 Jahre zurückzuführen sein, die seit der Veröffentlichung dieser Antwort vergangen sind. Unabhängig davon unterstützt diese Antwort einen reibungslosen Bildlauf und Flicking...+1

0 Stimmen

Hinzufügen von <!--suppress AndroidLintUselessParent --> über dem ScrollView in der xml-Datei wird diese Warnungen beseitigen.

120voto

EddieB Punkte 4923

Alles, was wirklich notwendig ist, ist die Funktion setMovementMethod(). Hier ist ein Beispiel mit einem LinearLayout.

Datei 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>

Datei 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);
    }
}

3 Stimmen

Gibt es eine Möglichkeit, diese Eigenschaft in XML festzulegen? Ich frage mich, warum sie diese Option auslassen würden.

0 Stimmen

Es funktioniert, aber ist der irgendeine Möglichkeit, es nach dem Scrollen zu aktualisieren? ich meine nach dem Scrollen der TextView ich gehe, um Text auf es zu ändern, aber seine Position bleibt gescrollt, auch wenn es nicht erforderlich ist. seine bcose zuvor hatte ich angewendet scroll...

10 Stimmen

Keine Bildlaufleisten, und der Bildlauf ist im Vergleich zum ScrollView Methode.

51voto

matasoy Punkte 659

Fügen Sie Ihrer Textansicht einfach Folgendes hinzu

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

17 Stimmen

Der kinetische Bildlauf ist nicht möglich. Verwenden Sie dies nicht.

3 Stimmen

@Timmmm wie bekommt man die kinetische Schriftrolle?

2 Stimmen

Sie wollen keinen "kinetischen Bildlauf" für einen Text, der gelesen werden muss.

47voto

Ahsan Raza Punkte 471

Es ist nicht notwendig, die

android:Maxlines="AN_INTEGER"`

Sie können Ihre Arbeit durch einfaches Hinzufügen erledigen:

android:scrollbars = "vertical"

Und fügen Sie diesen Code in Ihre Java-Klasse ein:

textview.setMovementMethod(new ScrollingMovementMethod());

0 Stimmen

Eine viel bessere Lösung als die akzeptierte, da die Größe des Rollbalkens genau auf den Text abgestimmt ist und kein Platz verschwendet wird.

0 Stimmen

Wenn ich ScrollView als übergeordnetes Element verwende, dann funktioniert es nicht

0 Stimmen

Ich frage mich, wenn der Textview ist vertikal lang... genau wie die Diskussion hier. Aber was ist, wenn wir den Fokus (Anzeige) auf die spezifische Position des Textes befindet sich auf ...? ist es verfügbar wie in html mit ID #anchoring...? in Android... textview ist das möglich? @AhsanRaza

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X