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.
- ConstraintLayout no me permite establecer una restricción que conecte una vista al borde de la pantalla
- Independiente checkableBehavior = "solo" grupos en NavigationView / DrawerLayout
- Android - ¿Cómo dividir una vista en 4 partes iguales?
- Galaxy Mega vs otros Phablets y Android Manifest
- Path.isConvex no es compatible. Android Studio - Botón de alternar
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>
- Haga que los envases de RadioButtons horizontales sean demasiado largos para la pantalla.
- Cómo crear personalizado spinner como borde alrededor de la ruleta con triángulo hacia abajo en el lado derecho?
- ¿El tema de AppCompat DayNight no funciona en Android 6.0?
- Cómo alinear el centro de un mapa de bits dentro de un lienzo en Android?
- Cómo aplicar imágenes de paisaje a gran escala
- Android: windowSoftInputMode = "adjustResize" no hace ninguna diferencia?
- Android busca recursos en la carpeta de retrato incluso cuando la aplicación está bloqueada en Paisaje
- Advertencia del adaptador de enlace personalizado de DataBinding de Android
¡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 clicable Widget con ListView no se puede hacer clic en ListItems
- Cambiar dinámicamente los datos de Custom PreferenceScreen