android - with - textview scrollby




Rendere scorrevole TextView su Android (17)

Aggiungi il seguente nella visualizzazione testuale in XML.

android:scrollbars="vertical"

E infine, aggiungi

textView.setMovementMethod(new ScrollingMovementMethod());

nel file Java.

Sto visualizzando il testo in una textview che sembra essere troppo lunga per essere inserita in una schermata. Devo far scorrere 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);

Aggiungi questo al tuo 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 devi scrivere le seguenti righe:

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

Crea la tua vista testo aggiungendo questo

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

Ecco come l'ho fatto solo 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>

GLI APPUNTI:

  1. android:fillViewport="true" combinato con android:layout_weight="1.0" farà in modo che la vista testo occupi tutto lo spazio disponibile.

  2. Quando si definisce ScrollView, NON specificare android:layout_height="fill_parent" altrimenti la scrollview non funziona! (questo mi ha fatto perdere un'ora ora! FFS).

SUGGERIMENTO PRO:

Per scorrere verso il basso a livello di codice dopo aver aggiunto il 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());
        }
    });
}

Ho lottato con questo per più di una settimana e finalmente ho capito come fare questo lavoro!

Il mio problema era che tutto scorreva come un "blocco". Il testo stesso scorreva, ma come un pezzo piuttosto che una riga dopo l'altra. Questo ovviamente non ha funzionato per me, perché avrebbe tagliato le linee in basso. Tutte le soluzioni precedenti non hanno funzionato per me, quindi ho creato il mio.

Ecco la soluzione più semplice di gran lunga:

Crea un file di classe chiamato: "PerfectScrollableTextView" all'interno di un pacchetto, quindi copia e incolla 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;
    }
}

Infine cambia il tuo 'TextView' in XML:

Da: <TextView

A: <com.your_app_goes_here.PerfectScrollableTextView


Il "suggerimento" di cui sopra da Qualcuno Da qualche parte ( Rendere TextView scorrevole su Android ) funziona alla grande, tuttavia, cosa succede se aggiungi dinamicamente del testo a ScrollView e desideri scorrere automaticamente verso il basso dopo un'app solo quando l'utente è in il fondo del ScrollView? (Forse perché se l'utente ha fatto scorrere verso l'alto per leggere qualcosa che non si desidera reimpostare automaticamente in fondo durante un'app, che sarebbe fastidioso.)

Ad ogni modo, eccolo qui:

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

MTextStatus.getLineHeight () lo farà in modo da non eseguire scrollToBottom () se l'utente si trova all'interno di una riga dalla fine di ScrollView.


Il modo migliore che ho trovato:

Sostituisci TextView con un EditText con questi attributi extra:

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

Non è necessario avvolgere in una ScrollView.


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

Quindi nel codice java.

textView.setMovementMethod(new ScrollingMovementMethod());


Non è necessario mettere dentro

android:Maxlines="AN_INTEGER"`

Puoi fare il tuo lavoro semplicemente aggiungendo:

android:scrollbars = "vertical"

E, inserisci questo codice nella tua classe Java:

textview.setMovementMethod(new ScrollingMovementMethod());

Non è necessario utilizzare effettivamente ScrollView .

Basta impostare il

android:scrollbars = "vertical"

proprietà del tuo TextView nel file xml del tuo layout.

Quindi utilizzare:

yourTextView.setMovementMethod(new ScrollingMovementMethod());

nel tuo codice.

Bingo, scorre!


Puoi o

  1. circondare il TextView con ScrollView ; o
  2. imposta il metodo Movimento su ScrollingMovementMethod.getInstance(); .

Quando hai finito con lo scorrimento, aggiungi questa linea all'ultima riga della vista quando inserisci qualcosa nella vista:

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

Se non vuoi utilizzare la soluzione EditText, potresti 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());
}

Se vuoi che il testo sia scostato all'interno della visualizzazione testo, puoi seguire quanto segue:

Per prima cosa dovresti creare una sottoclasse di textview.

E poi usa quello.

Di seguito è riportato un esempio di una vista testo 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, devi usarlo nell'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.


Tutto ciò che è veramente necessario è setMovementMethod (). Ecco un esempio che utilizza 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);
    }
}

Usalo in questo modo

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

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

E quando riesci a decodificare il dispositivo in quel momento, si verificano dei problemi . (come) l'intera pagina è scorrevole ma il metodo di scorrimento non funziona.

se hai ancora bisogno di usare ScrollView come genitore o metodo di scorrimento, allora usi anche la descrizione di seguito.

Se non si hanno problemi, si utilizza 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, EditText si comporta come TextView

E il tuo problema sarà risolto





android-textview