studio programacion herramientas fundamentos con avanzado aplicaciones android android-textview

programacion - manual de android en pdf



Coloca dos vistas de texto lado a lado en un diseƱo (3)

Tengo dos vistas de texto que debo poner una al lado de la otra en un diseño y tengo que respetar dos reglas:

  • Textview2 siempre debe mostrarse por completo.

  • Textview1 debe recortarse si no hay suficiente espacio en el diseño.

Ejemplos:

Textview1 | textview2

Teeeeeeeeeeeeeeeeeeeeextview1 ... | textview2

¿Algunas ideas?

La única manera que encontré que podría funcionar es crear un dibujo con el texto de textview2 y afectarlo como coumpoundDrawable to textview1.


¿Por qué necesitas ese dibujo? opción: puede usar textview1 con un ancho fijo y elipsispar el final ...:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/textview1" android:layout_width="100dp" android:layout_height="wrap_content" android:ellipsize="end" android:lines="1" android:padding="2dp" /> <TextView android:id="@+id/textview2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/textview1" android:padding="2dp" /> </RelativeLayout>


Envuelva los dos TextViews en un LinearLayout. Asigne un peso de diseño de 0 a textview2 y un peso de diseño de 1 a textview2.

Vea aquí para más información: Peso de diseño lineal

Si juegas con el siguiente ejemplo, verás que LinearLayout primero asigna espacio a textview2 (con peso 0) y luego asigna lo que queda a textview1 (con peso 1). Si no hay espacio suficiente para acomodar ambas vistas de texto, se visualizará primero el texto de vista de texto1. En el siguiente ejemplo, textview2 solo se convertirá en elipsis si LinearLayout es más pequeño que el tamaño de textview2. Asigne un ancho de diseño específico al FrameLayout y vea qué sucede.

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="200dp" android:layout_height="match_parent" android:background="#FF0000FF"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:background="#FFFF0000" android:ellipsize="end" android:maxLines="1" android:text="textview1" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="0" android:background="#FF00FF00" android:ellipsize="end" android:maxLines="1" android:text="textview2" /> </LinearLayout> </FrameLayout>


<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="right" android:orientation="horizontal" > <View android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/holo_green_light" android:singleLine="true" android:text="textView1" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/holo_blue_light" android:singleLine="true" android:text="textView2" /> </LinearLayout>

Editar:

Salida de texto textView1 corto:

Salida para texto textView1 largo: