2012-06-10 22 views
23

que tienen una fila ListView bastante simple:textviews RelativeLayout superpuestas

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

<TextView 
    android:id="@+id/tournament_name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:textSize="25dp" /> 

<TextView 
    android:id="@+id/tournament_winner" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:textSize="25dp" /> 

</RelativeLayout> 

Cuando el texto de "@+id/tournament_name" es larga - se superpone con la de "@+id/tournament_winner" y yo no entiendo por qué.

Intenté usar android:singleLine="false" en vano. También traté de usar android:inputType="textMultiLine" ya que el documento dice android:singleLine="false" está en desuso, pero luego aparece la advertencia: Attribute android:inputType should not be used with <TextView>: Change element type to <EditText> ? por lo que no sirve aquí también.

También intenté usar android:ellipsize="end" pero esto no funciona. Supongo que es porque el texto de la izquierda TextView ("@+id/tournament_name") NO es lo suficientemente largo como para llenar todo el ancho del ListView (cuyo código no se está sembrando aquí).

Estaba seguro de que si uso android:layout_width="wrap_content", los dos campos de TextView no deberían solaparse.

Aquí es un ejemplo (ver la segunda línea):

enter image description here

más ideas de cómo esto podría ser fijos?

Respuesta

39
android:layout_toLeftOf="@id/tournament_winner" in First TextView. 

también estableció android:maxLines="1" y Fix width for tournament winner porque cuando su long nombre del torneo no puede ver ...

row.xml

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

    <TextView 
     android:id="@+id/tournament_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_toLeftOf="@id/tournament_winner" 
     android:maxLines="1" 
     android:text="NAMEEEEEEEEEEEEEEEEEEEEEEEEEEE" 
     android:textSize="25dp" /> 

    <TextView 
     android:id="@+id/tournament_winner" 
     android:layout_width="wrap_content" android:layout_marginLeft="10dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:text="WINER" 
     android:textSize="25dp" /> 

</RelativeLayout> 
+1

¿No resultaría esto un error en el tiempo de compilación? tournament_winner aún no existe, así que ¿cómo se puede alinear nada? – Vas

+0

Esto se trata en la respuesta aquí: https://stackoverflow.com/a/11594737/369480 Debe asegurarse de especificar un + en la ID. – gnuf

+0

Felicitaciones a ndroid: layout_toLeftOf = "@ id/tournament_winner". funciona –

11

Muchas gracias por su respuesta - lo siento que tomó yo un tiempo para responder. Terminé usando su android:layout_toLeftOf="@+id/tournament_winner" pero dejé la línea única y el margen a la izquierda sin usar, ya que el resultado me pareció perfecto (espero que este sea también el caso para otros dispositivos).

Una cosa sin embargo - en la primera vista de texto (TOURNAMENT_NAME) que tenía que utilizar android:layout_toLeftOf="@+id/tournament_winner" y no android:layout_toLeftOf="@id/tournament_winner" - prestar atención al agregado +. Por alguna razón, recibo un error al usar android:layout_toLeftOf="@id/tournament_winner": Error: No se encontraron recursos que coincidan con el nombre de pila ..., por lo que parece que es posible y NECESARIO definir el recurso en el momento de llamarlo porque el sistema no lo hace saberlo antes de que se definiera.

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

<TextView 
    android:id="@+id/tournament_name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_toLeftOf="@+id/tournament_winner"    
    android:layout_alignParentLeft="true"   
    android:textSize="25dp" /> 

<TextView 
    android:id="@+id/tournament_winner" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"   
    android:layout_alignParentRight="true" 
    android:textSize="25dp" /> 

</RelativeLayout> 
+3

Simplemente cambie el orden de agregar TextViews en su xml si no desea agregar el +. Entonces, primero agrega tournament_winner y luego tournament_name. – Dante

+0

No creo que necesites '' 'android: id =" @ + id/tournament_winner "' '', simplemente usa '' android: id = "@ id/tournament_winner" '' 'desde' '' tournament_winner' '' ya se ha definido en '' 'layout_toLeftOf''' –

0

Puede usar la vista de texto único en lugar de dos y simplemente mostrar ambas cadenas en una vista de texto.