2011-07-05 47 views
9

Ahora tengo dos textViews uno alineado a la izquierda del diseño relativo y otro alineado a la derecha. El texto de la izquierda es mucho más largo que el de la derecha. En algunas ocasiones, el texto de la izquierda es de dos líneas. Cuando esto sucede, este texto se superpone con el texto alineado a la derecha.¿Cómo puedo evitar que las vistas se superpongan en el diseño relativo?

¿Hay alguna forma de evitar esto? ¿O hay una manera de decir que si el texto de la izquierda tiene dos líneas, coloque el texto a la derecha en la segunda línea?

Tengo problemas con el nombre y el tiempo aquí abajo:

<RelativeLayout android:layout_width="wrap_content" android:id="@+id/relativeLayout" android:layout_height="wrap_content"> 

    <TextView android:text="TextView" android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10sp" android:textStyle="bold" android:textSize="16sp"></TextView> 
    <TextView android:layout_width="wrap_content" android:id="@+id/address" android:text="address" android:layout_height="wrap_content" android:layout_below="@+id/name" android:layout_alignLeft="@+id/name" android:layout_marginLeft="30sp"></TextView> 
    <TextView android:layout_width="wrap_content" android:layout_toRightOf="@+id/address" android:text="" android:layout_height="wrap_content" android:layout_alignTop="@+id/address" android:layout_alignBottom="@+id/address" android:id="@+id/crossStreet"></TextView> 
    <TextView android:layout_width="wrap_content" android:id="@+id/time" android:text="Time" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginRight="10sp"></TextView> 

</RelativeLayout> 

Respuesta

16

Podría contener vez esos dos TextViews dentro de un LinearLayout horizontal (que a su vez podría todavía ser un hijo de su RelativeLayout). A continuación, asigne los atributos de peso adecuados a cada uno de los dos TextView dentro de LinearLayout.

+0

impresionante. funcionó. También hice que el tiempo se alineara a la derecha del diseño lineal, para referencia futura. – mergesort

+0

¿Se supone que debo jugar con los pesos? Tengo .35 y .65 para hacerlo funcionar, pero .4 y .6 arrojaron resultados divertidos – mergesort

0

Por favor, compruebe a continuación el código más útil para usted.

<?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:layout_width="fill_parent" 
     android:weightSum="1.0" android:id="@+id/relativeLayout" 
     android:layout_height="wrap_content"> 
     <TextView android:text="TextView1 hhhhh hhhhhhhh hhhhhhhh hhhhhhh hhhhhh" 
      android:id="@+id/name" android:layout_weight="0.5" 
      android:layout_width="0dip" android:layout_height="wrap_content" 
      android:layout_marginLeft="10sp" android:textStyle="bold" 
      android:textSize="16sp"></TextView> 
     <TextView android:layout_width="0dip" android:layout_weight="0.5" 
      android:id="@+id/time" android:text="Textview4" 
      android:layout_height="wrap_content" android:layout_alignParentRight="true" 
      android:layout_marginRight="10sp"></TextView> 
    </LinearLayout> 
</LinearLayout> 
19

Para conseguir mismo resultado utilizando RelativeLayout por favor utilice android:layout_toLeftOf="@+id/right_text". Posicionará el borde derecho de esta vista a la izquierda de la ID de vista de anclaje dada.

Por favor, siga este ejemplo:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingLeft="@dimen/margin_material_small" 
    android:paddingRight="@dimen/margin_material_small"> 
    <TextView 
     android:id="@+id/long_text" 
     style="@style/Base.TextAppearance.AppCompat.Title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_toLeftOf="@+id/right_text" 
     android:singleLine="true" 
     tools:text="Some text field that will definitely overlap with another one" /> 
    <TextView 
     android:id="@+id/right_text" 
     style="@style/Base.TextAppearance.AppCompat.Display1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" 
     android:singleLine="true" 
     tools:text="10.34" /> 
    <TextView 
     android:id="@+id/subtext" 
     style="@style/Base.TextAppearance.AppCompat.Medium" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/long_text" 
     android:layout_alignParentLeft="true" 
     android:layout_toLeftOf="@+id/right_text" 
     android:singleLine="true" 
     tools:text="Some other text slightly smaller"/> 
</RelativeLayout> 


Resultado de la disposición anterior:

Result of attached example

+7

Esta debería ser la respuesta aceptada –

+1

Esto es ciertamente preferible a la respuesta actualmente aceptada. No es necesario anidar otro contenedor (diseño lineal) dentro de un diseño relativo. Desea reducir los contenedores de anidación tanto como sea posible. – PentaPenguin

0
<RelativeLayout 
     android:id="@+id/relativeParent" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <TextView 
      android:id="@+id/titleLeft" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:layout_toLeftOf="@+id/imageRight" 
      android:layout_alignParentStart="true" /> 

     <ImageView 
      android:id="@+id/imageRight" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentEnd="true" 
      android:src="@drawable/image" /> 
</RelativeLayout> 



android:layout_toLeftOf="@+id/imageRight" 
android:layout_alignParentStart="true" 

resolvieron el problema sin añadir LinearLayout adicional

0

Mejor reparación:

android:layout_toStartOf="@id/item_on_the_right" 
Cuestiones relacionadas