2010-12-05 19 views
8

Ich erstelle eine benutzerdefinierte Listenelement in und Android-Listenansicht. Es ist sehr einfach, es hat eine Textansicht auf der linken Seite und ein Bild auf der rechten Seite. Das Bild sollte vollständig nach rechts ausgerichtet sein, und die Textansicht sollte den gesamten Platz auf der linken Seite einnehmen. Problem ist, ich kann das Bild zeigen, aber es schiebt nach links. Wenn ich die Textansichtsbreite auf fill_parent einstelle, verschwindet das Bild. hier ist mein Layout:Android List Item: TextView auf der linken Seite, Bild auf der rechten Seite

<?xml version="1.0" encoding="utf-8" ?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" 
       android:layout_width="fill_parent" android:layout_height="50px" android:layout_gravity="center_vertical"> 
    <!-- item --> 
    <TextView android:id="@+id/txtItem" android:gravity="center_vertical" android:textSize="20px" android:layout_width="fill_parent" 
      android:layout_height="fill_parent"/> 

    <!-- disclosure image --> 
    <ImageView android:layout_gravity="right|center_vertical" android:src="@drawable/common_icon_arrow_disclosure" 
       android:layout_width="wrap_content" android:layout_height="wrap_content"/> 
</LinearLayout> 

Ich habe auch eine relative Layout versucht, aber das gleiche passiert. Was mache ich falsch?


EDIT: Zur Klarstellung ist es das, was ich versuche zu erreichen:

alt text

ich mag das Textfeld den gesamten linken Bereich zu übernehmen, und das Bild auf seinen das Recht, unskaliert, vertikal zentriert.

Antwort

0

Relatives Layout ist was Sie wollen. In Ihrem Fall hat das Attribut fill_parent dazu geführt, dass die Textansicht das Bild vom Bildschirm verschoben hat. Wenn Sie Relatives Layout verwenden und die Textansicht so einstellen, dass sie das Layout_toLeftOf verwendet, sollte es funktionieren.

Hier ist ein kleines Beispiel, dass ich denke funktioniert (ich habe es nicht getestet und es ist aus dem Gedächtnis, aber die Idee ist da) ...

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="50px" 
       android:layout_gravity="center_vertical"> 
    <ImageView android:id="@+id/img" 
      android:layout_gravity="right|center_vertical" 
      android:src="@drawable/common_icon_arrow_disclosure" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 

    <TextView android:id="@+id/txtItem" 
      android:gravity="center_vertical" 
      android:textSize="20px" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:layout_toLeftOf="@id/img" /> 
</RelativeLayout> 
+0

Das funktioniert auch nicht. Das Pfeilbild erscheint, aber der Text nicht. Außerdem ist der Pfeil (der weniger hoch als der Gegenstand ist) nicht vertikal zentriert, sondern ist oben ausgerichtet. Ich hatte eigentlich etwas sehr ähnliches, aber es hatte die imageView mit layout_toRight des Textbildes, aber das tat genau das Gegenteil von deinem Beispiel, der Text tauchte auf, aber nicht der Pfeil. –

+0

Es tut mir leid, dass ich nicht die Zeit habe, einen Testfall zu schreiben, aber etwas anderes, was Sie versuchen könnten, ist * layout_alignParentLeft * anstelle von * layout_gravity *. Ich weiß, dass ich genau das getan habe, wonach Sie fragen, aber ich kann es in meinen Projekten nicht finden und ich weiß, dass es das RelativeLayout verwendet hat. Viel Glück und ich werde morgen wieder einchecken, wenn ich kann. –

+1

ich habe layout_alignParentRight = "true" auf der imageView verwendet (ich habe die Bildansicht und die Textansicht gewechselt, da die Bildansicht auf der rechten Seite ist, sollte sie wirklich als zweite deklariert werden). das Problem ist zweifach; Ich kann sowohl die Textansicht als auch die IMG-Ansicht anzeigen lassen, aber 1) Die Bildansicht ist nicht vertikal zentriert - wie ich erwähnt habe, ist das Bild tatsächlich kleiner als die Zeilenhöhe und 2) die Bildansicht ist nicht auf die ausgerichtet richtig, stattdessen folgt es direkt nach dem Ende des Textes. Wenn ich die Textansicht ändere, um ein layout_width = "fill_parent" zu haben, verschwindet die Bildansicht wieder. :( –

7

Sie Bitmap ziehbar wie diese verwenden kann (dies trägt auch abgerundete Ecken):

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape> 
      <solid android:color="@android:color/white" /> 
      <stroke 
       android:width="2dp" 
       android:color="#adadad" 
      /> 
      <corners android:radius="5dp" /> 
     </shape> 
    </item> 
    <item android:right="5dp" 
     android:top="2dp" 
     android:bottom="2dp"> 
     <bitmap 
      android:src="@drawable/image" 
      android:gravity="right" 
     /> 
    </item> 
</layer-list> 

und dieses ziehbar im Hintergrund Eigentum Ihrer Textview setzen:

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/right_image" 
    android:text="some text" 
    /> 
+0

Danke! Dies funktioniert auch für die Einstellung eines benutzerdefinierten Hintergrunds und Pfeil nach unten Symbol für ein Spinner-Steuerelement. Legen Sie den Hintergrund des Spinner auf eine Zeichnungs-Ressource wie diese definiert und Sie sind festgelegt. – Red3

1

Ihren Text mit der Mutter links ausrichten, und die Schwere des Bildes nach rechts gesetzt:

<?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="48dp"> 

    <TextView 
    android:id="@+id/team_member_name" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_alignParentLeft="true" 
    android:gravity="center_vertical" 
    android:singleLine="true"/> 

    <ImageView 
    android:id="@+id/team_member_icon" 
    android:layout_alignParentRight="true" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_gravity="right" 
    android:layout_marginLeft="8dp" 
    android:layout_marginRight="8dp" 
    android:src="@drawable/circle_green"/> 

</RelativeLayout> 
0

Das ist für mich gearbeitet:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 

    <TextView android:id="@+id/date" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:padding="10dp" 
    android:layout_marginRight="10dp" 
    android:textSize="16sp" 
    android:textColor="@color/text_color" 
    android:layout_alignParentLeft="true" 
    android:gravity="center_vertical"/> 

    <ImageView android:id="@+id/imageBtn" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:padding="10dp" 
    android:contentDescription="@string/delete" 
    android:src="@drawable/delete_minus_png" 
    android:layout_alignParentRight="true" /> 

</RelativeLayout> 

Linie android: layout_marginRight = "10DP" hat den Trick .

Hoffe es hilft!

0

Sieht so aus, als gäbe es einen Layout-Bug oder so. Wenn der TextView das Flag fill_parent hat, wird das ImageView vom Layout weggedrückt, selbst wenn der TextView-Inhalt klein genug ist.

22

Sie können das Zeichen auch direkt zur Textansicht hinzufügen.

<TextView 
    android:id="@+id/txtItem" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:drawableRight="@drawable/common_icon_arrow_disclosure" 
    android:gravity="center_vertical" 
    android:textSize="20px" /> 
+0

Genaueste und einfache Antwort. – ElYeante

+0

Dies sollte die akzeptierte Antwort sein, da TextView die Verbindung automatisch in der Nähe ihrer Grenzen einstellt .. –

+0

Aber wie können wir onClick nur auf ein Bild, nicht auf einen ganzen Text, ausführen? –

Verwandte Themen