wake-up-neo.com

TextView auf Android scrollbar machen

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

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

Sie müssen tatsächlich kein ScrollView verwenden.

Einfach das einstellen

Android:scrollbars = "vertical"

eigenschaften Ihres TextView in der XML-Datei Ihres Layouts.

Dann benutze:

yourTextView.setMovementMethod(new ScrollingMovementMethod());

in deinem Code.

Bingo, es scrollt!

1590
Amit Chintawar

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. Durch Android:fillViewport="true" in Kombination mit Android:layout_weight="1.0" nimmt die Textansicht den gesamten verfügbaren Platz ein.

  2. Geben Sie bei der Definition der Bildlaufansicht NICHT Android:layout_height="fill_parent" an, sonst funktioniert die Bildlaufansicht nicht! (Das hat mich gerade dazu veranlasst, eine Stunde zu verschwenden! FFS).

PRO TIPP:

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

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

Alles was wirklich nötig ist, ist 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);
    }
}
119
EddieB

Erstellen Sie Ihren Text, indem Sie dies hinzufügen

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

Es ist nicht notwendig, einzufügen

Android:Maxlines="AN_INTEGER"`

Sie können Ihre Arbeit erledigen, indem Sie einfach Folgendes hinzufügen:

Android:scrollbars = "vertical"

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

textview.setMovementMethod(new ScrollingMovementMethod());
37
Ahsan Raza

Du kannst entweder

  1. umgeben die TextView durch eine ScrollView; oder
  2. setzen Sie die Movement-Methode auf ScrollingMovementMethod.getInstance();.
26
Samuh

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"

Es ist nicht notwendig, ein ScrollView einzubinden.

18
Valentin Galea

Dies ist "So wenden Sie ScrollBar auf Ihre TextView an" und verwenden Sie nur XML.

Zuerst müssen Sie ein Textview-Steuerelement in die Datei main.xml aufnehmen und etwas Text hineinschreiben ...

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

Platzieren Sie als Nächstes 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 ist es...

13
mOmO

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:

Damit die Textansicht nach unten scrollen kann, während der Text sie ausfüllt, müssen Sie Folgendes hinzufügen:

    Android:gravity="bottom"

in die TextView-XML-Datei. Es wird automatisch nach unten gerollt, wenn mehr Text eingeht.

Natürlich müssen Sie den Text mit der Anfügefunktion anstelle des gesetzten Textes hinzufügen:

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

Ich habe es für Log-Zwecke verwendet.

Ich hoffe das hilft ;)

12
MBH

Der obige "Pro-Tipp" von Someone Somewhere ( TextView scrollbar auf Android - erstellen) funktioniert jedoch hervorragend. Was passiert, wenn Sie dynamisch Text zum ScrollView hinzufügen und nach einem Anhängen automatisch nach unten scrollen möchten nur, wenn sich der Benutzer unten in der ScrollView befindet? (Vielleicht, weil der Benutzer nach oben gescrollt wurde, um etwas zu lesen, möchten Sie während eines Anfügens nicht automatisch nach unten zurückkehren, was ärgerlich wäre.)

Wie auch immer, hier ist es:

if ((mTextStatus.getMeasuredHeight() - mScrollView.getScrollY()) <=
        (mScrollView.getHeight() + mTextStatus.getLineHeight())) {
    scrollToBottom();
}

MTextStatus.getLineHeight () macht es so, dass Sie scrollToBottom () nicht scrollen können, wenn sich der Benutzer innerhalb einer Zeile vom Ende der ScrollView befindet.

11
Mark Cramer

Dies sorgt für einen reibungslosen Bildlauf mit einer Bildlaufleiste.

ScrollView scroller = new ScrollView(this);
TextView tv = new TextView(this);
tv.setText(R.string.my_text);
scroller.addView(tv);
9
IT-Dan

Wenn der Text innerhalb der Textansicht gescrollt werden soll, können Sie folgende Schritte ausführen:

Zuerst sollten Sie die Textansicht subclass müssen.

Und dann benutze das.

Im Folgenden finden Sie ein Beispiel für eine untergeordnete Textansicht.

public class AutoScrollableTextView extends TextView {

    public AutoScrollableTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        setEllipsize(TruncateAt.Marquee);
        setMarqueeRepeatLimit(-1);
        setSingleLine();
        setHorizontallyScrolling(true);
    }

    public AutoScrollableTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setEllipsize(TruncateAt.Marquee);
        setMarqueeRepeatLimit(-1);
        setSingleLine();
        setHorizontallyScrolling(true);
    }

    public AutoScrollableTextView(Context context) {
        super(context);
        setEllipsize(TruncateAt.Marquee);
        setMarqueeRepeatLimit(-1);
        setSingleLine();
        setHorizontallyScrolling(true);
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        if(focused)
            super.onFocusChanged(focused, direction, previouslyFocusedRect);
    }

    @Override
    public void onWindowFocusChanged(boolean focused) {
        if(focused)
            super.onWindowFocusChanged(focused);
    }

    @Override
    public boolean isFocused() {
        return true;
    }
}

Nun müssen Sie das im XML auf folgende Weise verwenden:

 <com.yourpackagename.AutoScrollableTextView
     Android:layout_width="fill_parent"
     Android:layout_height="wrap_content"
     Android:text="This is very very long text to be scrolled"
 />

Das ist es.

8
Dipendra

Fügen Sie Folgendes in der Textansicht in XML hinzu.

Android:scrollbars="vertical"

Und zum Schluss noch hinzufügen

textView.setMovementMethod(new ScrollingMovementMethod());

in der Java-Datei.

6
user3921740

Ich habe TextView nicht gefunden, um zu scrollen, um die "Fling" -Geste zu unterstützen, bei der es nach einem Bildlauf nach oben oder unten weiter scrollt. Am Ende habe ich das selbst implementiert, weil ich aus verschiedenen Gründen kein ScrollView verwenden wollte, und es schien keine MovementMethod zu geben, die es mir erlaubte, Text auszuwählen und auf Links zu klicken.

6
android.weasel

Fügen Sie dies Ihrem XML-Layout hinzu:

Android:ellipsize="Marquee"
Android:focusable="false"
Android:marqueeRepeatLimit="Marquee_forever"
Android:scrollHorizontally="true"
Android:singleLine="true"
Android:text="To Make An textView Scrollable Inside The TextView Using Marquee"

Und im Code musst du folgende Zeilen schreiben:

textview.setSelected(true);
textView.setMovementMethod(new ScrollingMovementMethod());
4
Ritesh

Wenn Sie mit der Bildlauffunktion fertig sind, fügen Sie diese Zeile zur letzten Zeile der Ansicht hinzu, wenn Sie etwas in die Ansicht eingeben:

((ScrollView) findViewById(R.id.TableScroller)).fullScroll(View.FOCUS_DOWN);
4
Rahul Baradia

Wenn Sie die EditText-Lösung nicht verwenden möchten, haben Sie möglicherweise mehr Glück mit:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.yourLayout);
    (TextView)findViewById(R.id.yourTextViewId).setMovementMethod(ArrowKeyMovementMethod.getInstance());
}
3
Justin Buser

Mit dem folgenden Code wird eine automatische horizontale Bildlauf-Textansicht erstellt:

Beim Hinzufügen von TextView zu XML verwenden

<TextView Android:maxLines="1" 
          Android:ellipsize="Marquee"
          Android:scrollHorizontally="true"/>

Legen Sie die folgenden Eigenschaften von TextView in onCreate () fest

tv.setSelected(true);
tv.setHorizontallyScrolling(true); 
2
whitepearl

Verwenden Sie es so

<TextView  
    Android:layout_width="match_parent" 
    Android:layout_height="match_parent" 
    Android:maxLines = "AN_INTEGER"
    Android:scrollbars = "vertical"
/>
1
Kamil Ibadov

Ich hatte mehr als eine Woche damit zu kämpfen und habe schließlich herausgefunden, wie das funktioniert.

Mein Problem war, dass alles als "Block" scrollen würde. Der Text selbst war ein Bildlauf, jedoch eher als ein Stück als Zeile für Zeile. Das funktionierte offensichtlich nicht für mich, weil es am unteren Rand Linien abschneiden würde. Alle bisherigen Lösungen haben bei mir nicht funktioniert, also habe ich meine eigenen entwickelt.

Hier ist die mit Abstand einfachste Lösung:

Erstellen Sie eine Klassendatei mit dem Namen 'PerfectScrollableTextView') in einem Paket. Kopieren Sie dann diesen Code und fügen Sie ihn in Folgendes ein:

import Android.content.Context;
import Android.graphics.Rect;
import Android.util.AttributeSet;
import Android.widget.TextView;

public class PerfectScrollableTextView extends TextView {

    public PerfectScrollableTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        setVerticalScrollBarEnabled(true);
        setHorizontallyScrolling(false);
    }

    public PerfectScrollableTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setVerticalScrollBarEnabled(true);
        setHorizontallyScrolling(false);
    }

    public PerfectScrollableTextView(Context context) {
        super(context);
        setVerticalScrollBarEnabled(true);
        setHorizontallyScrolling(false);
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        if(focused)
            super.onFocusChanged(focused, direction, previouslyFocusedRect);
    }

    @Override
    public void onWindowFocusChanged(boolean focused) {
        if(focused)
            super.onWindowFocusChanged(focused);
    }

    @Override
    public boolean isFocused() {
        return true;
    }
}

Ändern Sie schließlich Ihre 'TextView' in XML:

Von: <TextView

An: <com.your_app_goes_here.PerfectScrollableTextView

0
Petro

Versuche dies:

Android:scrollbars = "vertical"
0
mohamad sheikhi

In kotlin, um die Textansicht scrollbar zu machen

myTextView.movementMethod= ScrollingMovementMethod()

und füge diese Eigenschaft auch in xml hinzu

    Android:scrollbars = "vertical"
0
Raluca Lucaci

wann immer Sie die ScrollView als übergeordnetes verwenden müssen , Und Sie verwenden auch die Scroll-Verschiebungsmethode mit TextView. 

Und wenn Sie Ihr Gerät im Querformat porträtieren, treten zu diesem Zeitpunkt einige Probleme auf . (wie) die gesamte Seite ist scrollbar, aber die Verschiebungsmethode kann nicht funktionieren.

wenn Sie dennoch ScrollView als übergeordnete oder Scroll-Verschiebungsmethode verwenden müssen, verwenden Sie auch unter desc. 

Wenn Sie keine Probleme haben, verwenden Sie EditText anstelle von TextView

siehe unten : 

<EditText
     Android:id="@+id/description_text_question"
     Android:layout_width="match_parent"
     Android:layout_height="wrap_content"
     Android:background="@null"
     Android:editable="false"
     Android:cursorVisible="false"
     Android:maxLines="6"/>

Hier verhält sich der EditText wie TextView

Und Ihr Problem wird gelöst

0
D Prince

XML - Sie können Android:scrollHorizontally Attribute verwenden

Gibt an, ob der Text breiter als die Ansicht sein darf (und daher horizontal gescrollt werden kann).

Kann ein boolescher Wert sein, z. B. "true" oder "false".

Prigramacaly - setHorizontallyScrolling(boolean)

0
sam

Fügen Sie maxLines und scrollbars in TextView in XML ein.

<TextView Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:scrollbars="vertical"
    Android:maxLines="5" // any number of max line here.
    />

Dann in Java code.

textView.setMovementMethod(new ScrollingMovementMethod());

0
Khemraj

In meinem Fall.Constraint Layout.AS 2.3.

Code-Implementierung:

YOUR_TEXTVIEW.setMovementMethod(new ScrollingMovementMethod());

XML:

Android:scrollbars="vertical"
Android:scrollIndicators="right|end"
0
Sasha 888

Ich hatte dieses Problem, als ich TextView in der ScrollView verwendete. Diese Lösung hat für mich funktioniert. 

scrollView.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                description.getParent().requestDisallowInterceptTouchEvent(false);

                return false;
            }
        });

        description.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                description.getParent().requestDisallowInterceptTouchEvent(true);

                return false;
            }
        });
0
Rohit Mandiwal