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

29voto

Valentin Galea Punkte 1036

Der beste Weg, den ich gefunden habe:

Ersetzen Sie die TextView durch einen EditText mit diesen zusätzlichen Attributen:

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

In einer ScrollView ist ein Umbruch nicht erforderlich.

4 Stimmen

Einfach die beste und angemessenste Antwort, vor allem wenn man bedenkt, dass EditText eine TextView-Unterklasse ist und die Frage lautet, wie man die Textansicht scrollbar macht und nicht, wie man das Problem umgehen kann. Würde zweimal abstimmen, wenn ich könnte :)

5 Stimmen

@JustinBuser Da kann ich nur zustimmen:) Es ist reiner Zufall, dass es funktioniert, und es gibt keine Garantie, dass es in zukünftigen Android-Versionen funktionieren wird. Wenn Sie scrollen wollen, verwenden Sie die Scroll-Tools, die Android bietet. ScrollView ist der richtige Weg.

1 Stimmen

@Madbreaks Es ist nichts "serendipitous" über sie, EditText IST ein TextView mit ein paar zusätzlichen Methoden und Überschreibungen, die speziell zugeschnitten ist, um unterschiedliche Länge Text unterzubringen. Insbesondere überschreibt EditText den Rückgabewert für die TextView-Funktion getDefaultMovementMethod. Die Standard-Implementierung gibt NULL zurück, EditText tut im Grunde dasselbe, was alle diese anderen Antworten vorschlagen. Was die Verwendung der von Android zur Verfügung gestellten Tools betrifft, so ist die EditText-Klasse weit weniger wahrscheinlich veraltet als eine der anderen Methoden, die in diesen Antworten zu finden sind.

29voto

Samuh Punkte 35993

Sie können entweder

  1. umgeben die TextView von einem ScrollView ; oder
  2. setzen Sie die Methode Movement auf ScrollingMovementMethod.getInstance(); .

21voto

MBH Punkte 15647

Einfach. So habe ich es gemacht:

  1. XML-Seite:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        tools:context="com.mbh.usbcom.MainActivity">
        <TextView
            android:id="@+id/tv_log"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scrollbars="vertical"
            android:text="Log:" />
    </RelativeLayout>
  2. Java-Seite:

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

Bonus:

Um die Textansicht nach unten rollen zu lassen, während der Text sie füllt, müssen Sie etwas hinzufügen:

    android:gravity="bottom"

in die TextView xml-Datei. Es wird automatisch nach unten scrollen, wenn mehr Text eingegeben wird.

Natürlich müssen Sie den Text mit der Funktion append anstelle von set text hinzufügen:

    tv_log.append("\n" + text);

Ich habe es für Log-Zwecke verwendet.

Ich hoffe, das hilft ;)

15voto

mOmO Punkte 186

Dies ist "How to apply ScrollBar to your TextView", nur mit XML.

Zunächst müssen Sie ein Textview-Steuerelement in der main.xml Datei und schreiben Sie einen Text hinein ... etwa so:

<TextView
    android:id="@+id/TEXT"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="@string/long_text"/>

Als Nächstes platzieren Sie das Textansicht-Steuerelement zwischen der Bildlaufansicht, um die Bildlaufleiste für diesen Text anzuzeigen:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent">

    <ScrollView
        android:id="@+id/ScrollView01"
        android:layout_height="150px"
        android:layout_width="fill_parent">

        <TextView
            android:id="@+id/TEXT"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="@string/long_text"/>

    </ScrollView>
</RelativeLayout>

Das war's...

7 Stimmen

Warum schreiben Sie das überhaupt? Dies ist eine fast identische, wenn auch weniger korrekte Version einer Antwort, die mehr als 6 Monate vor Ihrem Schreiben veröffentlicht wurde.

14voto

Mori Punkte 901

Wenn Sie Kotlin auf diese Weise: XML

 <TextView
            android:id="@+id/tvMore"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:maxLines="3"
            android:scrollbars="vertical" />

Tätigkeit

tvMore.movementMethod = ScrollingMovementMethod()

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