validar texto studio solo salto propiedades personalizar obtener mostrar linea letras edittext datos caja android user-interface scroll textview

android - studio - ¿Cómo puedo hacer que un TextView se desplace automáticamente a medida que agrego más líneas de texto?



salto de linea edittext android (8)

De su Código, dos pasos tienen que hacer:

Paso 1

Aunque código en Xamarin Android, pero como en Java en xxxActivity.java para terminalOutput invoke debe ser así

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

Método setMovementMethod () por el parámetro ScrollingMovementMethod () es el truco.

Paso 2

Y en el diseño como en Java-Android también en activity_xxx.xml para la declaración de TextView como arriba debe tener que agregar esto

android:gravity="bottom"

Cuando agregas una nueva línea al texto de salida como este

outputText.append("/n"+"New text line.");

Se desplazará a la última línea automáticamente, y esta toda la magia para su necesidad.

Entonces, tengo un TextView así:

<TextView android:layout_width="fill_parent" android:layout_height="140.7dp" android:id="@+id/terminalOutput" android:layout_marginBottom="0.0dp" android:scrollbars="vertical" android:scrollbarAlwaysDrawVerticalTrack="true" android:maxLines="8" />

Lo uso como una especie de registro en funcionamiento, que se muestra al usuario para que pueda supervisar el progreso de una tarea que dura aproximadamente 3 minutos. Sin embargo, una vez que voy más de 8 líneas, el texto desaparece de la pantalla. Esto no es intuitivo para el usuario porque no tiene manera de saber que se salió de la pantalla, salvo para sondear manualmente al intentar desplazarse hacia abajo.

¿Cómo puedo hacerlo para que cada vez que agregue texto a este TextView haga que se desplace lo más bajo posible?

Además, esto está en Xamarin Android, pero no creo que sea relevante. Es fácil de traducir entre él y Java


Desde " Cómo desplazarse hacia abajo en un ScrollView en el inicio de la actividad ":

final ScrollView scrollview = ((ScrollView) findViewById(R.id.scrollview)); scrollview.post(new Runnable() { @Override public void run() { scrollview.fullScroll(ScrollView.FOCUS_DOWN); } });

Lo que necesita es poner fullScroll() después de anexar la operación.


Estoy usando Xmarin.

Mi solución es la mencionada por muchas personas, para textView dentro de ScrollView.

Si desea ver la nueva línea en la parte inferior de la vista, use

android:layout_gravity="bottom"

Esto mantiene la nueva línea en la parte inferior hasta que se desplace la vista. La vista permanece dondequiera que haya desplazado.

No se necesita código

Sin embargo, si desea que el contenido esté siempre en la parte inferior después de agregarlo, debe agregar el código después de anexar ():

myText.Append(...); myscroll.FullScroll(FocusSearchDirection.Down);


Ninguna de estas respuestas era exactamente lo que quería, así que se me ocurrió esto.

textView.append(log); while (textView.canScrollVertically(1)) { textView.scrollBy(0, 10); }

No olvides configurar el método de movimiento antes de desplazarte

textView.setMovementMethod(new ScrollingMovementMethod());


Para mí, nada funcionó a la perfección, excepto una combinación de estos dos:

  • Configurando scroller.scrollTo(0, 70); en tu clase java. Úselo antes de configurar tu vista de texto pero luego de anexar esa cadena. 52 dp es la altura de mi dispositivo. Puedes encontrarlo usando scroller.getBottom ()); Entonces usé 70 para ajustar la vista de desplazamiento.
  • Configuración android:scrollY="30dp" en su vista de texto.

Puedes probar en 2 soluciones:

  1. Ponga TextView en ScrollView

    <ScrollView android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Your Text" > </TextView> </ScrollView>

  2. Use desplazamiento personalizado TextView (igual que el tradicional TextView, pero puede desplazarse)

    import android.content.Context; import android.graphics.Rect; import android.text.TextPaint; import android.util.AttributeSet; import android.view.animation.LinearInterpolator; import android.widget.Scroller; import android.widget.TextView; public class ScrollTextView extends TextView { // scrolling feature private Scroller mSlr; // milliseconds for a round of scrolling private int mRndDuration = 250; // the X offset when paused private int mXPaused = 0; // whether it''s being paused private boolean mPaused = true; /* * constructor */ public ScrollTextView(Context context) { this(context, null); // customize the TextView setSingleLine(); setEllipsize(null); setVisibility(INVISIBLE); } /* * constructor */ public ScrollTextView(Context context, AttributeSet attrs) { this(context, attrs, android.R.attr.textViewStyle); // customize the TextView setSingleLine(); setEllipsize(null); setVisibility(INVISIBLE); } /* * constructor */ public ScrollTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // customize the TextView setSingleLine(); setEllipsize(null); setVisibility(INVISIBLE); } /** * begin to scroll the text from the original position */ public void startScroll() { // begin from the very right side mXPaused = -1 * getWidth(); // assume it''s paused mPaused = true; resumeScroll(); } /** * resume the scroll from the pausing point */ public void resumeScroll() { if (!mPaused) return; // Do not know why it would not scroll sometimes // if setHorizontallyScrolling is called in constructor. setHorizontallyScrolling(true); // use LinearInterpolator for steady scrolling mSlr = new Scroller(this.getContext(), new LinearInterpolator()); setScroller(mSlr); int scrollingLen = calculateScrollingLen(); int distance = scrollingLen - (getWidth() + mXPaused); int duration = (new Double(mRndDuration * distance * 1.00000 / scrollingLen)).intValue(); setVisibility(VISIBLE); mSlr.startScroll(mXPaused, 0, distance, 0, duration); mPaused = false; } /** * calculate the scrolling length of the text in pixel * * @return the scrolling length in pixels */ private int calculateScrollingLen() { TextPaint tp = getPaint(); Rect rect = new Rect(); String strTxt = getText().toString(); tp.getTextBounds(strTxt, 0, strTxt.length(), rect); int scrollingLen = rect.width() + getWidth(); rect = null; return scrollingLen; } /** * pause scrolling the text */ public void pauseScroll() { if (null == mSlr) return; if (mPaused) return; mPaused = true; // abortAnimation sets the current X to be the final X, // and sets isFinished to be true // so current position shall be saved mXPaused = mSlr.getCurrX(); mSlr.abortAnimation(); } @Override /* * override the computeScroll to restart scrolling when finished so as that * the text is scrolled forever */ public void computeScroll() { super.computeScroll(); if (null == mSlr) return; if (mSlr.isFinished() && (!mPaused)) { this.startScroll(); } } public int getRndDuration() { return mRndDuration; } public void setRndDuration(int duration) { this.mRndDuration = duration; } public boolean isPaused() { return mPaused; } }

Cómo utilizar:

ScrollTextView scrolltext = (ScrollTextView) findViewById(R.id.YourTextView);

(Fuente de la clase ScrollTextView: http://bear-polka.blogspot.com/2009/01/scrolltextview-scrolling-textview-for.html )


Según la respuesta aquí Hacer TextView desplazable en Android

No es necesario utilizar un ScrollView en realidad.

Solo configura el

android:maxLines = "AN_INTEGER"

android: scrollbars = "vertical" propiedades de su TextView en el archivo xml de su diseño.

Luego usa:

yourTextView.setMovementMethod(new ScrollingMovementMethod());

en tu código

Que funcionará..


Tenía la misma pregunta. Intenté varias decisiones de esta y otras discusiones similares, nada funcionó. Lo resolvió de esta manera:

edtConsoleText.setSelection(edtConsoleText.getText().length());

después de cada .append() .