2012-06-10 2 views
23

У меня есть довольно простой ListView строки:RelativeLayout TextViews перекрывающихся

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

Когда текст "@+id/tournament_name" долго - она ​​пересекается с одной из "@+id/tournament_winner", и я не понимаю, почему.

Я пробовал использовать android:singleLine="false" безрезультатно. Я также пробовал использовать android:inputType="textMultiLine", так как в документе указано, что android:singleLine="false" устарел, но затем я получаю предупреждение: Attribute android:inputType should not be used with <TextView>: Change element type to <EditText> ? так что здесь неплохо.

Я также пробовал использовать android:ellipsize="end", но это не сработает. Я предполагаю, что это потому, что текст слева TextView ("@+id/tournament_name") НЕ достаточно длинный, чтобы заполнить всю ширину ListView (какой код здесь не посеял).

Я был уверен, что если я использую android:layout_width="wrap_content", то два поля TextView не должны перекрываться.

Вот пример (см вторую строку):

enter image description here

Любые дальнейшие идеи, как это можно исправить?

ответ

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

набор Также android:maxLines="1" и Fix width for tournament winner, потому что, когда его long название турнира не могу видеть ...

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

Не ошибется ли это во время компиляции? tournament_winner еще не существует, так как можно что-то согласовать с ним? – Vas

+0

Это описано в ответе здесь: https://stackoverflow.com/a/11594737/369480 Вам нужно убедиться, что вы указали + в ID. – gnuf

+0

Kudos to ndroid: layout_toLeftOf = "@ id/tournament_winner". он работает –

11

Большое спасибо за ваш ответ - жаль, что взял мне немного времени, чтобы ответить. Я закончил тем, что использовал android:layout_toLeftOf="@+id/tournament_winner", но оставил одну строку, а край слева остался неиспользованным, так как результат казался мне идеальным (надеюсь, что это также относится и к другим устройствам).

Одна вещь, хотя - в первом текстовом виде (tournament_name) Я должен был использовать android:layout_toLeftOf="@+id/tournament_winner" и не android:layout_toLeftOf="@id/tournament_winner" - обратить внимание на добавленную +. По какой-то причине я получаю сообщение об ошибке, используя android:layout_toLeftOf="@id/tournament_winner": Ошибка: ресурс не найден, который соответствует указанному имени ..., поэтому кажется, что возможно и НЕОБХОДИМО определить ресурс во время его вызова, потому что система не знать это до того, как оно будет определено.

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

Просто измените порядок добавления TextViews в xml, если вы не хотите добавлять +. Поэтому сначала добавьте турнир_winner, а затем имя_архина. – Dante

+0

Я не думаю, что вам нужно '' 'android: id =" @ + id/tournament_winner "' '', просто используйте '' 'android: id =" @ id/tournament_winner "' '' с '' '' турнир_winner' '' уже определен в '' 'layout_toLeftOf''' –

0

Вы можете использовать одиночный текстовый вид вместо двух и просто отображать обе строки в одном текстовом виде!

Смежные вопросы