2010-04-27 18 views
6

Ich versuche, etwas wie dieses zu bekommen: http://img202.imageshack.us/img202/552/layoutoy.png. Ich verwende das als Listenelement (technisch gesehen als Gruppenansicht einer ExpandableListView).Wie wird der Button nach rechts ausgerichtet, ohne von TextView überlappt zu werden?

Hier ist die XML-Datei:

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

    <TextView 
     android:id="@+id/list_item_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:ellipsize="end" /> 

    <Button 
     android:id="@+id/list_item_button" 
     android:text="Click me!" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_toRightOf="@id/list_item_text" /> 

</RelativeLayout> 

Aber das funktioniert nicht. Die Schaltfläche umschließt ihren Inhalt nicht, stattdessen wird der gesamte verfügbare horizontale Speicherplatz verwendet. Der TextView tut seinen Inhalt, aber was ich es tun soll, ist zu schneiden, wenn es den Button überlappt.

Mit anderen Worten, ich möchte, dass alle Schaltflächen die gleiche Breite haben, unabhängig von der Menge an Text in den Textansichten. Ist das überhaupt möglich?

Antwort

5

Ich denke, Sie sollten es anders herum versuchen. Stellen Sie TextView auf der linken Seite der Schaltfläche. Auf diese Weise überlappt die Textansicht den Button nicht. Wenn Sie möchten, dass es am Ende der Zeile abgeschnitten wird, müssen Sie es auf eine Zeile beschränken. Im Moment würde es den Rest des Textes nur in die nächste Zeile verschieben.

Dies sollte den Trick:

<Button 
    android:id="@+id/list_item_button" 
    android:text="Click me!" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true"/> 

<TextView 
    android:id="@+id/list_item_text" 
    android:text="veryveryveryveryveryveryveryveryveryverylong" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_toLeftOf="@id/list_item_button" 
    android:ellipsize="end" /> 

</RelativeLayout> 
+0

Das hat den Trick, Prost! – benvd

+0

+1. Guter Gedanke! – Tiago

4

Bevor jemand die oben beschriebene Methode (mit dem RelativeLayout) gezeigt versucht, sollten Sie Linearlayout für diese. Die Gewichte sollten korrekt eingestellt sein: das Element, das den leeren Platz einnehmen muss, muss ein Gewicht von 1 haben und die Breite muss auf fill_parent gesetzt sein, das Element, das seine minimale Größe behalten muss ein Gewicht von 0 mit einer Breite von haben wrap_content

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight"> 
<TextView 
    android:id="@+id/list_item_text" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight=1 
    android:ellipsize="end" /> 

<Button 
    android:id="@+id/list_item_button" 
    android:text="Click me!" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight=0/> 

</LinearLayout> 
Verwandte Themen