Necesita hacer que TextView se desplace verticalmente automáticamente

Estoy tratando de desarrollar una actividad que será parte de una simple aplicación de chat para un proyecto universitario. Quiero tener una configuración donde tengo un EditText y un Button que cuando se presiona toma el texto de EditText y lo agrega al contenido de un TextView en la misma actividad. Eso parece estar funcionando bien para mí hasta ahora, pero también quiero hacerlo de modo que cuando se envía un mensaje para ser mostrado en el TextView si no hay espacio suficiente para mostrar la nueva línea de texto que se desplaza hacia abajo automáticamente.

Esto es lo que mi onCreate() en la actividad parece

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final EditText edit = (EditText) findViewById(R.id.editText1) ; final Button button = (Button) findViewById(R.id.button1) ; final TextView text = (TextView) findViewById(R.id.textView1) ; //text.setMaxHeight(200); text.setSelected(true); text.setMovementMethod(new ScrollingMovementMethod()); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(edit.getText().length() > 0) { text.append(edit.getText() + "\n") ; edit.setText(""); } } }); } 

Esta es la sección relevante del archivo de diseño XML de la Actividad.

 <TextView android:id="@+id/textView1" android:ellipsize="marquee" android:focusable="false" android:marqueeRepeatLimit="marquee_forever" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="70dp" android:text="" android:scrollbars ="vertical" android:maxLines="10" /> 

¿Qué estoy haciendo mal? O estoy malentendido y es lo que quiero no es posible con una vista de texto?

EDIT: Archivo XML completo

 <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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:id="@+id/button1" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/editText1" android:layout_alignBottom="@+id/editText1" android:layout_alignParentRight="true" android:text="@string/okString" /> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="107dp" android:layout_toLeftOf="@+id/button1" android:ems="10" /> <ScrollView android:id="@+id/scrollView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="70dp" android:ellipsize="marquee" android:focusable="false" android:marqueeRepeatLimit="marquee_forever" android:maxLines="10" android:scrollbars="vertical" android:text=" " /> </ScrollView> 

No deberías poner el componente verticalmente desplazable dentro de scrollview verticalmente desplazable, y como tu texto es desplazable, no veo por qué necesitas el scrollview en primer lugar. A continuación, puede utilizar text.setScrollY (text.getLayout (). GetHeight ()). No estoy seguro de si funcionará, pero si no lo hace, puede intentar Obtener el tamaño de un texto en TextView

  String text="Im trying to develop an activity that will be part of a simple chat application for a college project. I want to have a setup where I have an EditText and a Button which when pressed takes the " mText = (TextView) findViewById(R.id.textView1); mText.setText(text) mText.setMovementMethod(new ScrollingMovementMethod()) 

XML

  <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/black" android:text=" " /> 

Nota: Instead of storing your text as normal string save it in HTML format which will add line break in your text.

  String text="Im trying to develop an activity that will<br> be part of a simple chat <br>application for a college project. I want to have a setup where I have an EditText and <br>a Button which when pressed takes the " 

Y luego agregue esta línea al código anterior

  mText.setText(Html.fromHtml(text)); 

Esto devolverá un resultado más apropiado

Suponiendo que ha insertado una etiqueta de cierre </RelativeLayout> en su archivo xml, he probado su código y está funcionando bien en mi final. Intente limpiar el proyecto y reconstruirlo de nuevo desde

 Project -> Clean Project -> Build Project 

EDIT: ¿Puedes intentar esto para el diseño? Tenga en cuenta que he eliminado ScrollView del diseño e insertado la línea text.setMovementMethod(new ScrollingMovementMethod()); de nuevo.

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:text=" " android:id="@+id/textView1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:scrollbars="vertical" android:maxLines="10"> </TextView> <RelativeLayout android:id="@+id/InnerRelativeLayout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" > <Button android:text="Button1" android:id="@+id/button1" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content"> </Button> <EditText android:id="@+id/editText1" android:layout_width="fill_parent" android:layout_toLeftOf="@id/button1" android:layout_height="wrap_content"> </EditText> </RelativeLayout> 

  • Android TextView: establecer dinámicamente el color de fondo no funciona
  • Android: Colorear parte de una cadena usando TextView.setText ()?
  • Escala textSize en un TextView
  • Palabra especial de Higlight en la vista de texto
  • Cómo utilizar TextAppearanceSpan
  • ¿Cómo cambio el valor TextView dentro del código Java?
  • Cómo eliminar las líneas antiguas de un TextView
  • Android Html.fromHtml (String) no funciona para <font color = '#'> text </ font>
  • Android sdk 18 La gravedad de TextView no funciona verticalmente
  • Cómo mostrar 3 puntos al final del texto en la vista de texto
  • Hacer ellipsized un TextView que tiene LinkMovementMethod
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.