Pregunta Hacer TextView desplazable en Android


Estoy mostrando texto en una vista de texto que parece ser demasiado larga para caber en una pantalla. Necesito hacer que mi TextView sea desplazable. Como lo puedo hacer ¿ese?

Aquí está el código:

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

625
2017-11-17 13:43


origen


Respuestas:


No necesita usar un ScrollView actualmente.

Solo configura el

android:scrollbars = "vertical"

propiedades de tu TextView en el archivo xml de su diseño.

Luego usa:

yourTextView.setMovementMethod(new ScrollingMovementMethod()); 

en tu código

Bingo, se desplaza!


1418
2017-07-15 14:07



Así es como lo hice puramente en 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>

NOTAS:

  1. android:fillViewport="true" combinado con android:layout_weight="1.0" hará que la vista de texto ocupe todo el espacio disponible.

  2. Al definir la vista de desplazamiento, NO especifique android:layout_height="fill_parent" De lo contrario, la vista de desplazamiento no funciona. (Esto me ha causado perder una hora ahora mismo! FFS).

CONSEJO PRO:

Para desplazarse mediante programación hacia la parte inferior después de agregar texto, use esto:

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

273
2017-12-16 09:16



Todo lo que realmente es necesario es el setMovementMethod (). Aquí hay un ejemplo usando LinearLayout.

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

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

117
2018-04-12 17:23



Haga que su vista de texto solo agregue esto

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

44
2017-07-26 01:59



No es necesario poner

android:Maxlines="AN_INTEGER"`

Puedes hacer tu trabajo simplemente agregando:

android:scrollbars = "vertical"

Y pon este código en tu clase de Java:

textview.setMovementMethod(new ScrollingMovementMethod());

36
2018-06-05 04:38



Tu también puedes

  1. rodear el TextView por un ScrollView; o
  2. establecer el método de Movimiento para ScrollingMovementMethod.getInstance();.

27
2018-01-19 10:04



La mejor manera que encontré:

Reemplace el TextView con un EditText con estos atributos adicionales:

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

No hay necesidad de envolver en un ScrollView.


17
2018-02-20 15:35



Este es "Cómo aplicar ScrollBar a su TextView", utilizando solo XML.

En primer lugar, debe tomar un control Textview en main.xml archive y escriba algo de texto ... como este:

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

A continuación, coloque el control de vista de texto entre la vista de desplazamiento para mostrar la barra de desplazamiento para este texto:

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

Eso es...


13
2018-06-06 07:49



Sencillo. Así es como lo hice:

  1. Lado 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. Lado de Java:

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

Prima:

Para permitir que la vista de texto se desplace hacia abajo a medida que el texto la completa, debe agregar:

    android:gravity="bottom"

al archivo TextView xml. Se desplazará hacia abajo automáticamente a medida que ingrese más texto.

Por supuesto, necesita agregar el texto usando la función de agregar en lugar de configurar el texto:

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

Lo usé para propósito de registro.

Espero que esto ayude ;)


12
2018-02-05 08:23



El "consejo profesional" de Someone Somewhere (Hacer TextView desplazable en Android) funciona muy bien, sin embargo, ¿qué sucede si agrega texto dinámicamente al ScrollView y desea desplazarse automáticamente hacia abajo después de un apéndice? solamente cuando el usuario está en la parte inferior de ScrollView? (Tal vez porque si el usuario se ha desplazado hacia arriba para leer algo que no desea restablecer automáticamente al final durante un apéndice, lo cual sería molesto).

De todos modos, aquí está:

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

MTextStatus.getLineHeight () lo hará para que no haga scrollToBottom () si el usuario está dentro de una línea desde el final de ScrollView.


11
2018-05-20 16:46