Android texto disposición pregunta: dos textviews, lado a lado, con diferentes alineaciones de diseño y pesos

Todavía soy un poco de un noob de Android, perdóname si esto es simple y yo simplemente no lo veo.

Hay dos porciones de texto en una vista que abarca todo el ancho horizontalmente, pero sólo es tan alta como una línea de texto. El lado izquierdo siempre debe mostrarse en su totalidad, pero no debe tomar más espacio horizontal de lo que necesita. El lado derecho debe ser empujado por el lado izquierdo y llenar el resto del ancho de la pantalla. Si el texto del lado derecho es menor que este ancho, el texto debe alinearse a la derecha horizontalmente. Si el texto es mayor que el ancho, debe desplazarse horizontalmente.

El texto de la parte derecha se actualizará con frecuencia y se deslizará con texto nuevo cuando la aplicación lo indique (explicando el TextSwitcher en el diseño).

He intentado dos estilos diferentes del diseño. En ambas situaciones, puedo obtener el lado izquierdo para "empujar" el diseño, el lado derecho para desplazarse, pero no puedo averiguar cómo obtener el lado derecho a alinear a la derecha. Siempre está alineado a la izquierda. Esta es una foto que muestra lo que está sucediendo …

Http://img10.imageshack.us/img10/5599/androidlayout.png

Además (pero menos importante), en mi código de diseño tengo android: fadingEdge = "ninguno" en el TextViews, pero todavía tiene un borde descolorido en el lado izquierdo y derecho cuando se desplaza. ¿Porqué es eso?

Aquí están los dos diseños que creé, que producen los resultados mostrados, pero no los resultados que quiero.

Uso de LinearLayout horizontal …

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/LinearLayoutStatusBar" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="2px" android:background="#555555" > <TextView android:id="@+id/TextViewTimer" android:textSize="18px" android:textColor="#FFFFFF" android:layout_gravity="left" android:layout_weight="0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="0px" android:layout_marginRight="3px" android:text="Left Side" > </TextView> <TextSwitcher android:id="@+id/TextSwitcherDetails" android:inAnimation="@anim/push_up_in" android:outAnimation="@anim/push_up_out" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:layout_marginLeft="3px" android:layout_marginRight="0px" > <TextView android:id="@+id/TextViewDetails1" android:textSize="18px" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="right" android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" android:focusable="true" android:focusableInTouchMode="true" android:fadingEdge="none" android:text="Right Side 1" > </TextView> <TextView android:id="@+id/TextViewDetails2" android:textSize="18px" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="right" android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" android:focusable="true" android:focusableInTouchMode="true" android:fadingEdge="none" android:text="Right Side 2 - This is a really long text this is long and fun and fun and long" > </TextView> </TextSwitcher> </LinearLayout> 

Entonces, ¿cómo puedo obtener ese texto en el lado derecho para alinear a la derecha. ¡Gracias!


EDITAR:

Encontré el problema … Había algunas cosas mal. En primer lugar, descubrí la diferencia entre gravedad y gravedad de diseño. Necesitaba usar la gravedad para alinear a la derecha el texto.

No puedo agregar más enlaces, así que copia y pega el enlace de abajo

Thinkandroid.wordpress.com/2010/01/14/how-to-position-views-properly-in-layouts/

Sin embargo, eso no me dio exactamente el diseño que quería, porque las largas líneas de texto estarán alineadas a la derecha antes de desplazarse y la parte delantera del mensaje no se puede leer hasta que pasea. Lo que necesitaba hacer era usar tres "columnas" de vistas, con el peso en la vista del medio (vacío) para ser "1" mientras que los otros "0" para que empuja el texto más a la derecha en la medida de lo posible a la Derecha, manteniendo al mismo tiempo alineación a la izquierda.

A continuación, descubrí que el ancho de un TextSwitcher es el mismo que el TextView hijo más grande. Este es un problema al cambiar de una línea larga a una línea corta usando setText () porque la columna central no empujará el texto pequeño hasta el borde. La solución es usar dos setText () s. Uno para hacer que la animación de fade-out, a continuación, empuje un ejecutable para ejecutar después de la animación para establecer el texto de nuevo para causar la animación de fade-in de la nueva línea.

Ahora mi único problema es que cuando la animación de fade-out se ejecuta en una larga línea de texto, si está en medio de desplazamiento, se restablece a la posición X = 0 antes de desaparecer, por lo que el efecto es que se desplaza, salta a la Posición de origen, luego desaparece. ¿Alguien sabe cómo arreglar eso?

(Quité el código de RelativeLayout arriba ya que estaba mal, ya que este post es realmente largo.)

Aquí está el código de diseño de trabajo …

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/LinearLayoutStatusBar" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="2px" android:background="#333333" > <TextView android:id="@+id/TextViewTimer" android:textSize="18px" android:textColor="#FFFFFF" android:layout_gravity="top" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0" android:layout_marginLeft="1px" android:layout_marginRight="4px" android:text="Left Side" > </TextView> <View android:id="@+id/ViewSpacer" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" ></View> <TextSwitcher android:id="@+id/TextSwitcherDetails" android:inAnimation="@anim/push_up_in" android:outAnimation="@anim/push_up_out" android:layout_gravity="top" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0" android:layout_marginRight="1px" > <TextView android:id="@+id/TextViewDetails1" android:textSize="18px" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" android:focusable="true" android:focusableInTouchMode="true" android:fadingEdge="none" > </TextView> <TextView android:id="@+id/TextViewDetails2" android:textSize="18px" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" android:focusable="true" android:focusableInTouchMode="true" android:fadingEdge="none" > </TextView> </TextSwitcher> </LinearLayout> 

¡Encontré el problema! Había algunas cosas mal. En primer lugar, descubrí la diferencia entre gravedad y gravedad de diseño. Necesitaba usar la gravedad para alinear a la derecha el texto.

http://thinkandroid.wordpress.com/2010/01/14/how-to-position-views-properly-in-layouts/

Sin embargo, eso no me dio exactamente el diseño que quería, porque las largas líneas de texto estarán alineadas a la derecha antes de desplazarse y la parte delantera del mensaje no se puede leer hasta que pasea. Lo que necesitaba hacer era usar tres "columnas" de vistas, con el peso en la vista del medio (vacío) para ser "1" mientras que los otros "0" para que empuja el texto más a la derecha en la medida de lo posible a la Derecha, manteniendo al mismo tiempo alineación a la izquierda.

A continuación, descubrí que el ancho de un TextSwitcher es el mismo que el TextView hijo más grande. Este es un problema al cambiar de una línea larga a una línea corta usando setText () porque la columna central no empujará el texto pequeño hasta el borde. La solución es usar dos setText () s. Uno para hacer que la animación de fade-out, a continuación, empuje un ejecutable para ejecutar después de la animación para establecer el texto de nuevo para causar la animación de fade-in de la nueva línea.

Desafortunadamente, el desplazamiento horizontal del texto parece terrible cuando el texto cambia cada cinco a diez segundos. Así que estoy dejando que salga de la pantalla.

  • Android Wear - Añadir icono por encima de CardFragment
  • Diseño de dos columnas con la primera columna wrap_content, second fill_parent
  • Cómo eliminar el relleno / margen del diseño predeterminado
  • Dividir la pantalla en la tableta android
  • ¿Cómo puedo obtener la ubicación actual de un ActionBar MenuItem?
  • Altura de diseño de Android mínima de match_parent, pero wrap_content si el contenido es mayor que parent
  • ¿Por qué se mueven los botones adyacentes al cambiar el tamaño del texto en un botón
  • Android: creación de dos columnas en una imagen lineal
  • Calcular el tamaño de la imagen cuando se utiliza setCompoundDrawables para EditText
  • ¿Por qué textStyle italic no se aplica en el diseño de Android para otros tipos de caracteres que serif?
  • ¿Cómo colocar el centro del diseño en la esquina superior derecha de otro diseño?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.