2010-08-14 12 views
6

que estoy tratando de hacer una vista de lista que se parece a esto: alt text http://pici.se/pictures/hjFksZvLx.jpgAlineación a la derecha y a la izquierda con diseño lineal o relativo con texto truncado?

Tiene dos partes, la izquierda está alineado a la izquierda y contiene dos textviews que son sola línea y truncada. La parte de la derecha también tiene dos textviews, pero están alineadas a la derecha y tienen un tamaño constante. El problema principal es que la parte derecha no se alinea a la derecha. Si utilizo un ancho estático para empujarlo hacia el lado derecho, funciona bastante bien, pero luego no se ve bien en el modo horizontal.

Pensé que debería ser simple de lograr. Pero no fue así.

Primero probé con LinearLayout:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 
    <LinearLayout 
     android:orientation="vertical" 
     android:id="@+id/L1" 
     android:layout_height="fill_parent" 
     android:layout_weight="0.8" 
     android:layout_width="0dip"> 
     <TextView 
      android:id="@+id/text1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:lines="1" 
      android:ellipsize="end" 
      android:scrollHorizontally="true" 
      android:text="Long text Long text Long text Long text Long text Long text Long text" /> 
     <TextView 
      android:id="@+id/text2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:lines="1" 
      android:ellipsize="end" 
      android:scrollHorizontally="true" 
      android:text="Short text" /> 
    </LinearLayout> 
    <LinearLayout 
     android:orientation="vertical" 
     android:id="@+id/L2" 
     android:layout_gravity="top|right" 
     android:layout_height="fill_parent" 
     android:layout_weight="0.2" 
     android:layout_width="0dip"> 
     <TextView 
      android:id="@+id/text4" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="right" 
      android:text="12:12" /> 
     <TextView 
      android:id="@+id/text3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="64%" 
      android:layout_gravity="right" /> 
    </LinearLayout> 
</LinearLayout> 

He estado jugando con la propiedad de peso, pero no parece ayudar. La parte derecha no se alinea con la derecha en absoluto.

Y luego tratado con RelativeLayout:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent"> 
    <TextView 
     android:id="@+id/text1" 
     android:layout_height="wrap_content" 
     android:lines="1" 
     android:scrollHorizontally="true" 
     android:layout_alignParentTop="true" 
     android:text="Long text Long text Long text Long text Long text Long text Long text" 
     android:layout_alignParentLeft="true" 
     android:ellipsize="end" 
     android:layout_width="275dp" /> 
    <TextView 
     android:id="@+id/text2" 
     android:layout_height="wrap_content" 
     android:lines="1" 
     android:ellipsize="end" 
     android:scrollHorizontally="true" 
     android:text="Long text Long text Long text Long text Long text Long text Long text" 
     android:layout_below="@+id/text1" 
     android:layout_alignParentLeft="true" 
     android:layout_width="275dp" /> 
    <TextView 
     android:id="@+id/text3" 
     android:layout_height="wrap_content" 
     android:text="12:12" 
     android:layout_gravity="right" 
     android:layout_alignParentRight="true" 
     android:layout_alignBaseline="@+id/text1" 
     android:layout_width="40dp" 
     android:layout_alignRight="@+id/text4" /> 
    <TextView 
     android:id="@+id/text4" 
     android:layout_height="wrap_content" 
     android:layout_gravity="right" 
     android:text="64%" 
     android:layout_alignParentRight="true" 
     android:layout_alignBaseline="@+id/text2" 
     android:layout_width="40dp" /> 
</RelativeLayout> 

mismo problema en este caso, la parte derecha no se está alineando con el derecho correctamente, y tengo que utilizar un tamaño estático de android: layout_width para empujarlo a el otro lado. Y si no usa un tamaño estático, el texto comenzará a cortarse entre sí.

Respuesta

9

Tengo el mismo problema que hace unos días. Algunos puntos:

  • que he usado en lugar de android:singleLine="true"android:lines="1". Honestamente, no sé la diferencia. Supongo que una vez está en desuso.

  • Para alinear a la derecha: android:gravity="right"

  • Para evitar la superposición coloqué sus TextViews a la izquierda dentro de un LinearLayout y añadirlo android:layout_marginRight="50dp"

Mi xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent"> 

    <LinearLayout android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:orientation="vertical" 
    android:layout_marginRight="50dp"> 

     <TextView 
      android:id="@+id/text1" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:scrollHorizontally="true" 
      android:layout_alignParentTop="true" 
      android:text="Long text Long text Long text Long text Long text Long text Long text" 
      android:layout_alignParentLeft="true" 
      android:ellipsize="end" 
      android:layout_width="275dp" /> 
     <TextView 
      android:id="@+id/text2" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:ellipsize="end" 
      android:scrollHorizontally="true" 
      android:text="Long text Long text Long text Long text Long text Long text Long text" 
      android:layout_below="@+id/text1" 
      android:layout_alignParentLeft="true" 
      android:layout_width="275dp" /> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/text3" 
     android:layout_height="wrap_content" 
     android:text="12:12" 
     android:layout_gravity="right" 
     android:layout_alignParentRight="true" 
     android:layout_alignBaseline="@+id/text1" 
     android:layout_width="40dp" 
     android:layout_alignRight="@+id/text4" /> 
    <TextView 
     android:id="@+id/text4" 
     android:layout_height="wrap_content" 
     android:layout_gravity="right" 
     android:text="64%" 
     android:layout_alignParentRight="true" 
     android:gravity="right" 
     android:layout_below="@id/text3" 
     android:layout_width="40dp" /> 
</RelativeLayout> 

Usar android:layout_marginRight="50dp" para evitar la superposición no parece la elección correcta, pero en este momento es la única solución que he encontrado.

+0

Gracias ... Esperaba evitar un Linearlayout adicional, pero esa era la única forma de hacerlo funcionar. – droidgren

+0

¿Cuál es el sentido de ajustar LinearLayout en RelativeLayout? ¿LinearLayout ahora es el único hijo de RelativeLayout y el padre probablemente puede ser eliminado? –

+1

@GlennBech: hay más widgets dentro de 'RelativeLayout', no solo' LinearLayout'. – Macarse

Cuestiones relacionadas