2012-06-10 16 views
23

Mam raczej prosty ListView rzędu:RelativeLayout TextView nakładających

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

Kiedy tekst "@+id/tournament_name" jest długa - to pokrywa się z jednym z "@+id/tournament_winner" i nie rozumiem dlaczego.

Próbowałem użyć android:singleLine="false" bezskutecznie. Próbowałem również używać android:inputType="textMultiLine", ponieważ dokumentacja mówi, że android:singleLine="false" jest przestarzałe, ale dostaję ostrzeżenie: Attribute android:inputType should not be used with <TextView>: Change element type to <EditText> ?, więc nie jest tu dobrze.

Próbowałem również używać android:ellipsize="end", ale to nie działa. Zakładam, że tak jest, ponieważ tekst po lewej stronie TextView ("@+id/tournament_name") NIE jest wystarczająco długi, aby wypełnić całą szerokość ListView (który kod nie jest tutaj zasiany).

Byłem pewien, że jeśli użyję android:layout_width="wrap_content", dwa pola TextView nie powinny się pokrywać.

Oto przykład (patrz drugi wiersz):

enter image description here

Jakiekolwiek dalsze pomysły jak to może być stałe?

Odpowiedz

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

ustawić także android:maxLines="1" i Fix width for tournament winner bo gdy jego nazwa turnieju long mogę zobaczyć ...

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

Czy nie spowoduje to błędu podczas kompilacji? turniej_winner jeszcze nie istnieje, więc jak można go dopasować? – Vas

+0

Zostało to uwzględnione w odpowiedzi tutaj: https://stackoverflow.com/a/11594737/369480 Musisz upewnić się, że podałeś + w identyfikatorze. – gnuf

+0

Kudos na ndroid: layout_toLeftOf = "@ id/turniej_winner". działa –

11

Dziękuję bardzo za odpowiedź - przepraszam zajęło mi trochę czasu na odpowiedź. Skończyło się na tym, że użyłem twojego android:layout_toLeftOf="@+id/tournament_winner", ale zostawiłem pojedynczą linię i margines po lewej stronie nieużywane, ponieważ wynik wydawał mi się idealny (mam nadzieję, że tak jest również w przypadku innych urządzeń).

Jedną rzeczą - w pierwszym widoku tekstowym (tournament_name) musiałem użyć android:layout_toLeftOf="@+id/tournament_winner" i nie android:layout_toLeftOf="@id/tournament_winner" - zwrócić uwagę na dodatkową +. Z jakiegoś powodu pojawia się błąd przy użyciu android:layout_toLeftOf="@id/tournament_winner": Błąd: Nie znaleziono zasobu pasującego do podanej nazwy ..., więc wydaje się, że jest możliwe i POTRZEBNE zdefiniowanie zasobu w czasie wywoływania go, ponieważ system nie znać to, zanim zostało to zdefiniowane.

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

Wystarczy zmienić kolejność dodawania TextViews w twoim xml, jeśli nie chcesz dodawać +. Najpierw dodaj turniej_winner, a następnie nazwa turnieju. – Dante

+0

Nie sądzę, że potrzebujesz '' 'android: id =" @ + id/turniej_winner "' '', po prostu użyj '' 'android: id =" @ id/turniej_winner "' '' od '' 'turniej_winner' '' zostało już zdefiniowane w '' 'layout_toLeftOf''' –

0

Możesz użyć widoku pojedynczego tekstu zamiast dwóch i po prostu wyświetlić oba łańcuchy w jednym widoku tekstowym !!

Powiązane problemy