2010-01-23 11 views
18

Mein Layout-Design ist ein TextView mit langem Text und ein ImageView auf der rechten Seite des TextView. Ich möchte das ImageView in seinem Elternteil vertikal zentrieren, also habe ich android: layout_centerVertical = "true" verwendet, aber es stellte sich heraus, dass das ImageView an der Unterseite seines Elternteils ausgerichtet war. Wenn ich die Eigenschaft layout_centerVertical nicht verwende, wird die ImageView an den Anfang des übergeordneten Elements ausgerichtet. Wie kann ich dieses Problem lösen? Vielen Dank.Wie zentriere ich ein ImageView vertikal in seinem Elternteil?

<?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:background="#000000"> 
    <ImageView android:id="@+id/t3" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:src="@drawable/arrow_right" 
     android:layout_alignParentRight="true" android:background="#ff0000" 
     android:layout_centerVertical="true" android:scaleType="centerInside" /> 
    <TextView android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="This a very very very very very very very very very very very very very very very very long sentence" 
     android:textColor="#231ACC" android:layout_toLeftOf="@id/t3" /> 
</RelativeLayout> 

Antwort

3

Sie könnten einen LinearLayout mit layout_width und layout_height Satz fill_parent und Schwerkraft auf vertical_center verwenden.

Etwas wie folgt aus:

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

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:gravity="center_vertical|center_horizontal" 
     android:orientation="horizontal"> 

     <EditText 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/input_field" 
      android:gravity="left" 
      android:layout_weight="1" 
      android:text="Left Aligned"/> 
       <EditText 
      android:id="@+id/input_field" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="right" 
      android:layout_weight="1" 
      android:text="Right Aligned"/> 
    </LinearLayout> 
</LinearLayout> 
+0

Könnten Sie Ihre XML-Datei schreiben? – user256239

+0

Das Codebeispiel stammt von etwas, an dem ich vor ein paar Tagen gearbeitet habe, wo ich eine Reihe von Texteingabefeldern horizontal und vertikal zentrieren musste. Die von Ihnen beschriebene Aufgabe klingt ähnlich. – JeremyFromEarth

+0

In meinem Beispiel ist es anders. Ich möchte, dass die Größe des ImageViews rechts neben der TextView genau der Größe des Bildes entspricht, das das ImageView enthält. Ihr Beispiel funktioniert also nicht für meinen Fall. – user256239

9

Änderung android:layout_height="wrap_content" zu android:layout_height="fill_parent" von RelativeLayout und fügen android:layout_centerVertical="true" zu Textview, wird es wie Charme arbeiten.

+0

Vielen Dank! Ich suchte nach etwas, das in einem RelativeLayout funktionieren würde! –

+0

layout_gravity ist eine Eigenschaft von LinearLayout, nicht RelativeLayout. Das ImageView muss nicht in RelativeLayout eingebunden werden. – erin

29

Versuchen android:layout_gravity="center_vertical"

+0

Es sollte stattdessen "android: layout_gravity =" center_vertical "' sein. – papaiatis

+0

papaiatis richtig ist, verwenden Sie "layout_gravity" und vergewissern Sie sich NICHT \t \t \t android mischen: Schwerkraft = "center" und android: layout_gravity = "center" –

+5

layout_gravity ist für RelativeLayout nicht geeignet. Sie sollten halten Sie android: layout_centerVertical = "true" und stellen Sie sicher, Android: layout_height = fill_parent – erin

3

Dieses Ihr Bild auf die vertikale Mittel darauf legen Wills Eltern:

android:layout_gravity="center_vertical"

Demo:

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="64dp" 
    android:orientation="horizontal"> 
    <ImageView 
     android:layout_width="48dip" 
     android:layout_height="48dip" 
     android:src="@drawable/ic_launcher" 
     android:contentDescription="Application icon" 
     android:layout_gravity="center_vertical" /> 

</LinearLayout> 
17

Dieses XML-Attribut auf das Kind, das Sie wünschen in der Mitte zu zentrieren:

android:layout_centerInParent="true" 

Dadurch wird es vertikal/horizontal zentriert.

+4

Der Elternteil muss ein 'RelativeLayout' sein, damit dies funktioniert. – KVISH

+0

@KVISH das ist wahr. Wie in der Frage des OP muss der Elternteil ein 'RelativeLayout' sein. – abriggs

1

einfach hinzufügen:

android: layout_gravity = "center_vertical | center_horizontal"

Verwandte Themen