2012-06-10 19 views
23

Ho una piuttosto semplice fila ListView:textviews RelativeLayout sovrapposti

<?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> 

Quando il testo di "@+id/tournament_name" è lunga - si sovrappone con quello da "@+id/tournament_winner" e non capisco perché.

Ho provato a utilizzare android:singleLine="false" inutilmente. Ho anche provato ad usare android:inputType="textMultiLine" come dice il docu android:singleLine="false" è deprecato ma poi ottengo l'avviso: Attribute android:inputType should not be used with <TextView>: Change element type to <EditText> ? quindi non va bene anche qui.

Ho anche provato a utilizzare android:ellipsize="end" ma questo non funziona. Presumo che sia perché il testo a sinistra TextView ("@+id/tournament_name") NON è abbastanza lungo da riempire tutta la larghezza dello ListView (che il codice non sta seminando qui).

Ero sicuro che se uso android:layout_width="wrap_content" i due campi TextView non dovrebbero sovrapporsi.

Ecco un esempio (si veda la seconda linea):

enter image description here

Eventuali ulteriori idee su come questo potrebbe essere fissato?

risposta

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

anche impostare android:maxLines="1" e Fix width for tournament winner perché quando il suo nome long torneo cant vedere ...

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

Non si otterrebbe un errore in fase di compilazione? tournament_winner non esiste ancora, quindi come può essere allineato a qualcosa? – Vas

+0

Questa risposta è indicata nella risposta qui: https://stackoverflow.com/a/11594737/369480 È necessario assicurarsi di specificare un + nell'ID. – gnuf

+0

Complimenti a ndroid: layout_toLeftOf = "@ id/tournament_winner". funziona –

11

La ringrazio molto per la risposta - dispiace che ha preso un po 'di tempo per rispondere. Ho finito per usare il tuo android:layout_toLeftOf="@+id/tournament_winner" ma ho lasciato la linea singola e il margine a sinistra inutilizzati, in quanto il risultato mi sembrava perfetto (spero che questo accada anche per altri dispositivi).

Una cosa però - nella prima visualizzazione del testo (tournament_name) Ho dovuto usare android:layout_toLeftOf="@+id/tournament_winner" e non android:layout_toLeftOf="@id/tournament_winner" - prestare attenzione al aggiunto +. Per qualche motivo ottengo un errore usando android:layout_toLeftOf="@id/tournament_winner": Errore: Nessuna risorsa trovata che corrisponde al nome specificato ... quindi sembra che sia possibile e NECESSARIO definire la risorsa al momento della chiamata perché il sistema non conoscilo prima che fosse definito.

<?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

Basta cambiare l'ordine di aggiungere TextViews nel tuo xml se non vuoi aggiungere il +. Quindi prima aggiungi torneo_winner e poi torneo_name. – Dante

+0

Non penso che tu abbia bisogno di '' 'android: id =" @ + id/tournament_winner "' '', usa solo '' 'android: id =" @ id/tournament_winner "' '' poiché '' 'tournament_winner' '' è già stato definito in '' 'layout_toLeftOf''' –

0

È possibile utilizzare un'unica visualizzazione di testo al posto dei due e semplicemente visualizzare entrambe le stringhe di testo in un'unica vista !!