Frage

Ich zeige Text in einer Textansicht an, die zu lang zu sein scheint, um in einen Bildschirm zu passen.Ich muss meine Textansicht scrollbar machen.Wie kann ich das tun? 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);
War es hilfreich?

Lösung

Sie brauchen nicht wirklich eine ScrollView zu verwenden.

Just stellen Sie die

android:scrollbars = "vertical"

Eigenschaften Ihres TextView in Ihrem Layout der XML-Datei.

Dann nutzen:

yourTextView.setMovementMethod(new ScrollingMovementMethod());

in Ihrem Code.

Bingo, es rollt!

Andere Tipps

Dies ist, wie ich es tat rein in 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>

NOTES:

  1. android:fillViewport="true" mit android:layout_weight="1.0" kombiniert wird der Textview nehmen den gesamten verfügbaren Platz machen.

  2. Wenn die Scroll definieren, geben Sie NICHT android:layout_height="fill_parent" sonst die Scrollview funktioniert nicht! (Dies hat mich gerade jetzt eine Stunde zu verschwenden! FFS).

PRO TIPP:

Um programmatisch scrollen Sie nach unten, nachdem Text anhängen, verwenden Sie diese:

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

Alles, was wirklich notwendig ist, ist die setMovementMethod (). Hier ist ein Beispiel eines Linearlayout verwendet wird.

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

Machen Sie Ihre Textview gerade hinzufügen, um dieses

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

Es ist nicht notwendig, in setzen

android:Maxlines="AN_INTEGER"`

Sie können Ihre Arbeit tun, indem einfach:

android:scrollbars = "vertical"

Und setzen Sie diesen Code in Ihrer Java-Klasse:

textview.setMovementMethod(new ScrollingMovementMethod());

Sie können entweder

  1. umgeben den TextView durch einen ScrollView; oder
  2. die Bewegung Methode ScrollingMovementMethod.getInstance(); gesetzt.

Die beste Weise, die ich gefunden:

Setzen Sie den Textview mit einem EditText mit diesen zusätzlichen Attributen:

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

Es besteht keine Notwendigkeit für die Verpackung in einem Scrollview.

Dies ist nur mit XML „Wie ScrollBar auf Ihre Textview anwenden“.

Zuerst müssen Sie in der eine Textview Kontrolle zu übernehmen main.xml Datei und schreiben einen Text hinein ... wie folgt aus:

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

Als nächstes legen Sie die Textansichtsteuerung zwischen dem Scroll für diesen Text die Bildlaufleiste angezeigt werden:

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

Einfach. Dies ist, wie ich tat es:

  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 scrollen, da der Text füllen zu lassen, müssen Sie hinzufügen:

    android:gravity="bottom"

auf die Textview XML-Datei. Es wird nach unten scrollen automatisch mehr Text kommt.

Natürlich müssen Sie den Text mit der Append Funktion anstelle von Set Text hinzuzufügen:

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

Ich benutzte es für Log Zweck.

Ich hoffe, das hilft;)

Der „Profi-Tipp“ oben von Someone Somewhere (TextView auf Android scrollbar machen) funktioniert hervorragend, aber was ist, wenn Sie der ScrollView dynamisch Text hinzufügen und nach einem Anhängen automatisch nach unten scrollen möchten? nur wenn sich der Benutzer am unteren Rand der ScrollView befindet?(Vielleicht, weil Sie, wenn der Benutzer nach oben gescrollt hat, um etwas zu lesen, beim Anhängen nicht automatisch nach unten zurückgesetzt werden möchten, was ärgerlich wäre.)

Wie auch immer, hier ist es:

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

mTextStatus.getLineHeight() sorgt dafür, dass Sie scrollToBottom() nicht ausführen, wenn sich der Benutzer innerhalb einer Zeile vom Ende der ScrollView befindet.

Dies wird glatt bieten Text mit einer Scroll-Leiste scrollen.

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

Wenn Sie Text möchten innerhalb der Textview gescrollt werden soll, dann können Sie die folgende wie folgt vor:

Zuerst Sie Unterklasse Textview haben sollten.

Und dann verwenden.

Es folgt ein Beispiel eines subclassed Textview.

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, Sie haben, dass auf diese Weise in der XML 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.

Ich fand nicht, Textview Scrollen die ‚schleudert‘ Geste zu unterstützen, wo es weiter nach einem leichten Schlag nach oben oder unten scrollen. Ich landete der Umsetzung, dass mich, weil ich nicht wollte, dass ein Scroll aus verschiedenen Gründen verwenden, und es schien nicht ein MovementMethod zu sein, dass beide mir erlaubt, Text zu markieren, und klicken Sie auf die Links.

Fügen Sie die folgende in der Textview in XML.

android:scrollbars="vertical"

Und schließlich fügt

textView.setMovementMethod(new ScrollingMovementMethod());

in der Java-Datei.

Wenn Sie mit scrollbaren fertig sind, fügen Sie diese Zeile in die letzte Zeile der Ansicht, wenn Sie etwas in der Ansicht eingeben:

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

Fügen Sie diese auf Ihre XML-Layout:

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 in Code haben Sie die folgenden Zeilen schreiben:

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

Wenn Sie nicht möchten, dass die EditText Lösung verwenden, dann können Sie auch mit mehr Glück haben:

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

Der folgende Code erstellt eine automatische horizontale Scrollen Textview:

Beim Hinzufügen von Textview zu xml Verwendung

<TextView android:maxLines="1" 
          android:ellipsize="marquee"
          android:scrollHorizontally="true"/>

Legen Sie die folgenden Eigenschaften von Textview in onCreate ()

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

Verwenden Sie es wie folgt

<TextView  
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:maxLines = "AN_INTEGER"
    android:scrollbars = "vertical"
/>

In Kotlin für die Herstellung der Textview scrollbaren

myTextView.movementMethod= ScrollingMovementMethod()

und fügen Sie diese Eigenschaft auch in XML

    android:scrollbars = "vertical"

In meinem case.Constraint Layout.AS 2.3.

Code-Implementierung:

YOUR_TEXTVIEW.setMovementMethod(new ScrollingMovementMethod());

XML:

android:scrollbars="vertical"
android:scrollIndicators="right|end"

Setzen Sie maxLines und scrollbars innerhalb Textview in xml.

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

Ich hatte dieses Problem, wenn ich TextView innerhalb des ScrollView verwendet wurde. Diese Lösung hat für mich gearbeitet.

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

, wenn Sie auf müssen verwenden, um die Scroll als Eltern , Und Sie auch die Scroll-Bewegung Methode mit Textview verwenden.

Und Wenn Sie Hoch- auf Querformat Ihres Gerät, dass die Zeit einige Probleme auftreten . (Wie) ganz Seite ist scrollbaren aber Scroll-Bewegung Methode kann nicht funktionieren.

Wenn Sie noch Scroll als Elternteil oder Scroll-Bewegung Methode verwenden müssen dann auch Sie unten ab verwenden.

Wenn Sie Probleme haben nicht dann verwenden Sie EditText statt 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 werden die EditText verhält sich wie Textview

Und das Problem wird gelöst

XML - Sie können android:scrollHorizontally Attribut verwenden

Ob der Text erlaubt ist breiter als die Ansicht (und kann somit horizontal gescrollt werden).

Kann ein Boolescher Wert, wie „wahr“ oder „falsch“.

Prigramacaly - setHorizontallyScrolling(boolean)

Versuchen Sie diese:

android:scrollbars = "vertical"

ich damit zu kämpfen für mehr als eine Woche und schließlich herausgefunden, wie diese Arbeit zu machen!

war mein Problem, dass alles als ‚Block‘ bewegen würde. Der Text selbst wurde Scrollen, sondern als ein Stück anstatt Zeile für Zeile. Das hat natürlich nicht für mich arbeiten, weil es Linien am unteren Rand abgeschnitten würde. Alle bisherigen Lösungen für mich nicht funktioniert hat, so dass ich meine eigene Handarbeit gemacht.

Hier ist die einfachste Lösung bei weitem:

Erstellen Sie eine Klassendatei genannt: 'PerfectScrollableTextView' in einem Paket, dann kopieren Sie diesen Code und fügen Sie ihn in:

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

Schließlich Ihren Textview "ändert in XML:

Von: <TextView

An: <com.your_app_goes_here.PerfectScrollableTextView

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top