Domanda

Sto visualizzando il testo in un TextView che sembra essere troppo lungo per adattarsi a una schermata.Devo rendere scorrevole il mio TextView.Come lo posso fare?

Ecco il codice:

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);
È stato utile?

Soluzione

Non è necessario utilizzare un ScrollView realtà.

Basta impostare il

android:scrollbars = "vertical"

proprietà del vostro TextView in file xml del layout.

Quindi utilizzare:

yourTextView.setMovementMethod(new ScrollingMovementMethod());

nel codice.

Bingo, scorre!

Altri suggerimenti

Questo è come ho fatto puramente 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>

Note:

  1. android:fillViewport="true" combinato con android:layout_weight="1.0" farà la TextView occupano tutto lo spazio disponibile.

  2. Quando si definisce lo Scrollview, non è necessario specificare android:layout_height="fill_parent" altrimenti la ScrollView non funziona! (Questo mi ha indotto a sprecare un'ora solo ora! FFS).

PRO TIP:

Per scorrere di programmazione fino in fondo dopo aggiungendo testo, utilizzare questo:

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

Tutto ciò che è veramente necessario è il setMovementMethod (). Ecco un esempio utilizzando un LinearLayout.

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

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

Fai la tua TextView solo l'aggiunta di questo

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

Non è necessario mettere in

android:Maxlines="AN_INTEGER"`

Si può fare il vostro lavoro semplicemente aggiungendo:

android:scrollbars = "vertical"

E, inserire questo codice nella classe Java:

textview.setMovementMethod(new ScrollingMovementMethod());

È possibile

  1. circondare la TextView da un ScrollView; o
  2. impostare il metodo di movimento per ScrollingMovementMethod.getInstance();.

Il modo migliore che ho trovato:

Sostituire la TextView con un'EditText con questi attributi extra:

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

Non è necessario per avvolgere in uno ScrollView.

Questa è "Come applicare scrollbar al vostro TextView", utilizzando solo XML.

In primo luogo, è necessario prendere un controllo TextView nel main.xml di file e scrivere un testo in esso ... in questo modo:

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

Quindi, posizionare il controllo di visualizzazione del testo tra lo ScrollView per visualizzare la barra di scorrimento per questo testo:

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

Questo è tutto ...

Semplice. Ecco come ho fatto:

  1. Side XML:

    <?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. lato Java:

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

Bonus:

Per consentire lo scorrimento vista testo verso il basso come il testo riempirla, si deve aggiungere:

    android:gravity="bottom"

per il file xml TextView. Sarà scorrere verso il basso automaticamente come più testo entra in gioco.

Naturalmente è necessario aggiungere il testo utilizzando la funzione di accodamento al posto del testo insieme:

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

L'ho usato per Log scopo.

Spero che questo aiuta;)

Il "suggerimento professionale" riportato sopra da Someone Somewhere (Rendere TextView scorrevole su Android) funziona benissimo, tuttavia, cosa succede se stai aggiungendo dinamicamente testo a ScrollView e desideri scorrere automaticamente fino in fondo dopo un'aggiunta? soltanto quando l'utente si trova nella parte inferiore di ScrollView?(Forse perché se l'utente ha fatto scorrere verso l'alto per leggere qualcosa, non vuoi ripristinare automaticamente la fine durante un'aggiunta, il che sarebbe fastidioso.)

Comunque eccolo qui:

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

mTextStatus.getLineHeight() farà in modo che tu non scrollToBottom() se l'utente si trova all'interno di una riga dalla fine di ScrollView.

Ciò fornirà il testo scorrimento continuo con una barra di scorrimento.

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

Se si desidera che il testo di scorrere all'interno del TextView, allora si può seguire il seguente:

In primo luogo si dovrebbe avere per sottoclasse TextView.

E poi usare quella.

Di seguito è riportato un esempio di un TextView sottoclasse.

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

Ora, è necessario utilizzare che in XML in questo modo:

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

Questo è tutto.

Non ho trovato TextView scorrimento per sostenere il gesto 'scappatella', dove continua lo scorrimento dopo un colpo su o giù. Ho finito per l'attuazione che me stesso, perché non volevo usare uno ScrollView per vari motivi, e non c'è sembrato di essere un MovementMethod che entrambi mi ha permesso di selezionare il testo e fare clic sui link.

Aggiungere la seguente nel TextView in XML.

android:scrollbars="vertical"

E, infine, aggiungere

textView.setMovementMethod(new ScrollingMovementMethod());

nel file Java.

Quando si è fatto con scorrevole, aggiungere questa riga all'ultima riga della vista quando si entra nulla nella vista:

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

Aggiungi questo al layout XML:

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"

E nel codice si deve scrivere le seguenti righe:

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

Se non si desidera utilizzare la soluzione EditText allora si potrebbe avere più fortuna con:

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

Il codice di seguito crea un TextView automatica scorrimento orizzontale:

Mentre l'aggiunta di TextView utilizzare XML

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

Impostare le seguenti proprietà di TextView a onCreate ()

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

Utilizzare in questo modo

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

In Kotlin per rendere il TextView scorrevole

myTextView.movementMethod= ScrollingMovementMethod()

e anche aggiungere in XML questa proprietà

    android:scrollbars = "vertical"

Nel mio case.Constraint Layout.AS 2.3.

implementazione Codice:

YOUR_TEXTVIEW.setMovementMethod(new ScrollingMovementMethod());

XML:

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

Mettere maxLines e scrollbars all'interno 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.
    />

Poi nel codice Java.

textView.setMovementMethod(new ScrollingMovementMethod());

Ho avuto questo problema quando stavo usando TextView all'interno del ScrollView. Questa soluzione ha funzionato per me.

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

ogni volta che è necessario utilizzare la ScrollView come genitore , e anche voi utilizza il metodo movimento di scorrimento con TextView.

E quando si verticale a orizzontale del dispositivo che il tempo si verificano una certa edizione . (Come) intera pagina è scorrevole ma il metodo movimento di scorrimento non può funzionare.

se hai ancora bisogno di utilizzare ScrollView come genitore o di un metodo di movimento di scorrimento quindi si utilizza anche sotto disc.

Se non avete problemi allora utilizzare EditText invece di TextView

vedi sotto:

<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"/>

Qui, l'EditText si comporta come TextView

E il problema sarà risolto

XML - È possibile utilizzare android:scrollHorizontally attributo

Se il testo è permesso di essere più larga della vista (e, pertanto, è possibile scorrere in orizzontale).

Può essere un valore booleano, come ad esempio "vero" o "falso".

Prigramacaly - setHorizontallyScrolling(boolean)

Prova questo:

android:scrollbars = "vertical"

Ho lottato con questo per oltre una settimana e finalmente capito come fare questo lavoro!

Il mio problema era che tutto sarebbe scorrere come un 'blocco'. Il testo stesso stava scorrendo, ma come un pezzo piuttosto che riga per riga. Questo, ovviamente, non ha funzionato per me, perché sarebbe tagliare le linee nella parte inferiore. Tutte le soluzioni precedenti non ha funzionato per me, così ho crafted mio.

Questa è la soluzione più semplice in assoluto:

Crea un file di classe denominato: 'PerfectScrollableTextView' all'interno di un pacchetto, quindi copiare e incollare questo codice 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;
    }
}

cambiare Infine la tua 'TextView' in XML:

Da: <TextView

A: <com.your_app_goes_here.PerfectScrollableTextView

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top