vertical studio android scroll textview android-textview

studio - Hacer TextView desplazable en Android



scroll vertical android studio (25)

Agrega esto a tu diseño 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"

Y en código tienes que escribir las siguientes líneas:

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

Estoy mostrando texto en una vista de texto que parece ser demasiado larga para que quepa en una pantalla. Necesito hacer que mi TextView sea desplazable. ¿Cómo puedo hacer eso?

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


Agregue lo siguiente en la vista de texto en XML.

android:scrollbars="vertical"

Y por último, añadir.

textView.setMovementMethod(new ScrollingMovementMethod());

en el archivo de Java.


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" contrario, la vista de desplazamiento no funciona. (¡Esto me ha hecho perder una hora ahora! FFS).

CONSEJO PRO:

Para desplazarse de manera programática a la parte inferior después de agregar texto, usa 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()); } }); }


Cuando haya terminado con el desplazamiento, agregue esta línea a la última línea de la vista cuando ingrese algo en la vista:

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


El "consejo profesional" de Someone Somewhere ( Making TextView desplazable en Android ) funciona muy bien, sin embargo, si está agregando dinámicamente texto a ScrollView y quisiera desplazarse automáticamente a la parte inferior después de un anexo solo cuando el usuario está en la parte inferior de la ScrollView? (Tal vez porque si el usuario se ha desplazado hacia arriba para leer algo, no querrá restablecerlo automáticamente en la parte inferior durante un apéndice, lo que sería molesto).

De todos modos, aquí está:

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

El mTextStatus.getLineHeight () lo hará para que no desplace ToBottom () si el usuario está dentro de una línea desde el final de ScrollView.


El siguiente código crea una vista de texto de desplazamiento horizontal automático:

Al agregar TextView a xml use

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

Establezca las siguientes propiedades de TextView en onCreate ()

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


En mi caso.Constraint Layout.AS 2.3.

Implementación de código:

YOUR_TEXTVIEW.setMovementMethod(new ScrollingMovementMethod());

XML:

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


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

Primero, debes tomar un control Textview en el archivo main.xml y escribir un texto en él ... así:

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


Esto proporcionará texto de desplazamiento suave con una barra de desplazamiento.

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


Haz tu vista de texto simplemente agregando esto

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


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.


Luché con esto por más de una semana y ¡finalmente descubrí cómo hacer que esto funcionara!

Mi problema era que todo se desplazaría como un ''bloque''. El texto en sí era de desplazamiento, pero como un trozo en lugar de una línea por línea. Esto obviamente no funcionó para mí, porque cortaría líneas en la parte inferior. Todas las soluciones anteriores no funcionaron para mí, así que hice mi propio diseño.

Esta es la solución más fácil de lejos:

Cree un archivo de clase llamado: ''PerfectScrollableTextView'' dentro de un paquete, luego copie y pegue este código en:

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

Finalmente cambie su ''TextView'' en XML:

Desde: <TextView

Para: <com.your_app_goes_here.PerfectScrollableTextView


No encontré TextView desplazándose para admitir el gesto de ''lanzar'', donde continúa desplazándose después de un movimiento hacia arriba o hacia abajo. Terminé implementándolo porque no quería usar un ScrollView por varias razones, y no parecía haber un Método de Movimiento que me permitiera seleccionar texto y hacer clic en los enlaces.


No es necesario poner en

android:Maxlines="AN_INTEGER"`

Puedes hacer tu trabajo simplemente agregando:

android:scrollbars = "vertical"

Y, ponga este código en su clase de Java:

textview.setMovementMethod(new ScrollingMovementMethod());


No es necesario utilizar un ScrollView realidad.

Solo establece el

android:scrollbars = "vertical"

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

Luego use:

yourTextView.setMovementMethod(new ScrollingMovementMethod());

en su codigo

Bingo, se desplaza!


Ponga maxLines y scrollbars dentro de TextView en xml.

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

Luego en el código java.

textView.setMovementMethod(new ScrollingMovementMethod());


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 que la vista de texto se desplace hacia abajo a medida que el texto la llena, debe agregar:

android:gravity="bottom"

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

Por supuesto, debe agregar el texto usando la función de agregar en lugar de establecer texto:

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

Lo usé para fines de registro.

Espero que esto ayude ;)


Si desea que el texto se desplace dentro de la vista de texto, puede seguir lo siguiente:

Primero deberías subclasificar la vista de texto.

Y luego usar eso.

A continuación se muestra un ejemplo de una vista de texto subclasificada.

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

Ahora, tienes que usar eso en el XML de esta manera:

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

Eso es.


Si no desea utilizar la solución EditText, podría tener más suerte con:

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


Todo lo que es realmente necesario es el setMovementMethod (). Aquí hay un ejemplo usando un 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); } }


Tu también puedes

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

Tuve este problema cuando estaba usando TextView dentro de ScrollView . Esta solución ha funcionado para mí.

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


Usalo asi

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


XML - Puedes usar android:scrollHorizontally Attribute

Si se permite que el texto sea más ancho que la vista (y, por lo tanto, se puede desplazar horizontalmente).

Puede ser un valor booleano, como "verdadero" o "falso".

Prigramacaly - setHorizontallyScrolling(boolean)


siempre que necesite usar ScrollView como elemento principal , y también usa el método de movimiento de desplazamiento con TextView.

Y cuando retratas a la vista horizontal de tu dispositivo, esa vez ocurre algún problema . (como) toda la página es desplazable pero el método de movimiento de desplazamiento no funciona

Si aún necesita usar ScrollView como método de movimiento principal o de desplazamiento, entonces también usa el siguiente desc.

Si no tiene ningún problema, utilice EditText en lugar de TextView

vea abajo :

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

Aquí, el EditText se comporta como TextView

Y tu problema se resolverá