Disposición de Android: ¿Cómo mantener el elemento de texto más a la derecha y elipse el elemento de texto de la izquierda a medida que crece?

Tengo un LinearLayout que contiene dos TextViews. Deje que el texto del primer TextView sea "texto corto" y el texto del segundo TextView sea "(s)".

<LinearLayout android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" android:orientation="horizontal"> <TextView android:id="@+id/variable-size" android:layout_height="wrap_content" android:layout_width="wrap_content" android:ellipsize="middle" android:lines="1" android:singleLine="true" android:text="short text"/> <TextView android:id="@+id/fixed-size" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:ellipsize="none" android:lines="1" android:singleLine="true" android:text="(s)" /> </LinearLayout> 

Quiero que el LinearLayout aparezca al usuario así:

[[short text][(s)]____________]

Donde ____ significa vista vacía.

Ahora si pongo una cadena un poco más larga en el primer TextView, quiero ver esto:

[[slightly longer text][(s)]__]

Y si pongo una cadena mucho más larga en el primer TextView, quiero ver esto:

[[really long ...ng text][(s)]]

Pero no puedo encontrar una manera de mantener el primer TextView de apagar el segundo TextView en conjunto, así:

[[really long lo... long text]]

¿Cómo obtengo el comportamiento que estoy buscando?

La base de la respuesta a su pregunta es la siguiente:

 <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="horizontal"> <TextView android:id="@+id/variable-size" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:ellipsize="middle" android:lines="1" android:singleLine="true" android:text="short text" /> <TextView android:id="@+id/fixed-size" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:ellipsize="none" android:lines="1" android:singleLine="true" android:text="(s)" /> </LinearLayout> 

PERO … desnudo en la mente que cambié el ancho de su LinearLayout de:

 android:layout_width="0dp" android:layout_weight="1" 

a

 android:layout_width="wrap_content" 

Y esa es una parte muy importante de la respuesta.

El código que he presentado funciona así:

 [[short text][(s)]] [[slightly longer text][(s)]] [[really long ...ng text][(s)]] 

Gestiona la elipsis correctamente, pero no puede introducir la "vista vacía" ( ____ ). Si no LinearLayout's layout_width , la elipsis funcionaría correctamente ( (s) no sería expulsado de la pantalla), pero la alineación del texto no sería correcta. Se vería así:

 [[short text ][(s)]] [[slightly longer text ][(s)]] [[really long ...ng text][(s)]] 

Así que si la "vista vacía" es una necesidad para usted, tendrá que implementarla (por ejemplo) con anidar su LinearLayout dentro de otro (y esta vez "vista vacía" va a ser una View real). Al igual que:

 <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:id="@+id/variable-size" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:ellipsize="middle" android:lines="1" android:singleLine="true" android:text="short text" /> <TextView android:id="@+id/fixed-size" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:ellipsize="none" android:lines="1" android:singleLine="true" android:text="(s)" /> </LinearLayout> <View android:id="@+id/empty_view" android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout> 

Esto le dará el siguiente comportamiento:

 [[[short text][(s)]]____________] [[[slightly longer text][(s)]]__] [[[really long ...ng text][(s)]]] 
  • ¿Cómo puedo alinear mi ImageView con mi TextView en LinearLayout?
  • Después de girar una línea lineal, los eventos onclick no cambian de posición después de la rotación
  • ¿Cómo puedo especificar el relleno según el tamaño de la pantalla
  • Necesita ayuda para centrar un EditText en un Layout Lineal
  • Adaptador de Android devolviendo LinearLayout
  • Problemas con el diseño de XML de Android
  • Añadiendo un lineal lineal dinámico a la vista actual android
  • Cómo agregar una vista a la parte superior de un diseño lineal en el código?
  • LinearLayout ImageView Redimensionar todos los anchos de imagen para ajustar
  • ¿Cómo puedo utilizar un compuesto dibujable en lugar de un LinearLayout que contiene un ImageView y un TextView
  • Android - overdraw diseño permite toque a través de LinearLayout
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.