2013-05-10 188 views
60

我想做一個列表行佈局。這個佈局在左邊最左邊有一個imageview,右邊是imageview旁邊的textview,最右邊是一個imageview。我希望他們都是垂直中心。RelativeLayout垂直中心

<RelativeLayout 
    android:layout_width="fill_parent" android:layout_height="100dp" 
    android:gravity="center_vertical" 
    > 
    <ImageView 
     android:id="@+id/icon" 
     android:layout_width="50dp" android:layout_height="50dp" 
     android:layout_gravity="center_vertical" /> 
    <TextView 
     android:id="@+id/func_text" android:layout_toRightOf="@id/icon" 
     android:layout_width="wrap_content" android:layout_height="100dp" 
     android:layout_gravity="center_vertical" /> 
    <ImageView 
     android:layout_width="50dp" android:layout_height="50dp" 
     android:layout_alignParentRight="true" 
     android:layout_gravity="center_vertical" 
     android:src="@drawable/arrow" /> 
</RelativeLayout> 

我也嘗試添加android:layout_centerVertical="true"到TextView的,但結果是TextView的底部對齊與兩個ImageView的。 我在android 4.2模擬器中試過這個。 有人可以幫我解釋一下嗎?

+0

您可以將您需要的樣機去做? – Noundla 2013-05-10 04:30:48

回答

58

我編輯了自己的佈局。現在檢查這個代碼。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:background="#33B5E5" 
android:padding="5dp" > 

<ImageView 
    android:id="@+id/icon" 
    android:layout_width="50dp" 
    android:layout_height="50dp" 
    android:layout_alignParentLeft="true" 
    android:layout_centerInParent="true" 
    android:background="@android:drawable/ic_lock_lock" /> 

<TextView 
    android:id="@+id/func_text" 
    android:layout_width="wrap_content" 
    android:layout_height="100dp" 
    android:layout_gravity="center_vertical" 
    android:layout_toRightOf="@+id/icon" 
    android:gravity="center" 
    android:padding="5dp" 
    android:text="This is my test string............" 
    android:textColor="#FFFFFF" /> 

<ImageView 
    android:layout_width="50dp" 
    android:layout_height="50dp" 
    android:layout_alignParentRight="true" 
    android:layout_centerInParent="true" 
    android:layout_gravity="center_vertical" 
    android:src="@android:drawable/ic_media_next" /> 

</RelativeLayout> 
150

使用

android:layout_centerVertical="true" 
+23

這應該是正確答案,因爲RelativeLayout沒有layout_gravity屬性。 – MightySeal 2014-08-07 04:33:42

+3

在相對佈局中的元素上使用它,而不是在相對佈局本身上 – 2014-11-25 14:27:26

+0

當我將它附加到RelativeLayout及其子級時,這會起作用。 – 2015-12-17 17:17:06

1

這也許是因爲TextView的太高。改變目前Android:TextView的的layout_height爲wrap_content或使用

android:gravity="center_vertical" 
3

這是爲我工作。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/rell_main_bg" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#096d74" > 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" 
    android:src="@drawable/img_logo_large" 
    android:contentDescription="@null" /> 

</RelativeLayout> 
6

嘗試對齊頂部和文本視圖底部的圖標之一,這將使文本視圖共享相同的高度,他們,然後設置gravitycenter_vertical使文本視圖中心內的文本垂直。

<TextView 
     android:id="@+id/func_text" android:layout_toRightOf="@id/icon" 
     android:layout_alignTop="@id/icon" android:layout_alignBottom="@id/icon" 
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     android:gravity="center_vertical" /> 
7

對於我來說,我不得不從的RelativeLayout刪除

<item name="android:gravity">center_vertical</item> 

,所以兒童的配置將工作:

<item name="android:layout_centerVertical">true</item> 
+0

這就是它!從RelativeLayout中刪除android:gravity center_vertical後立即運行它。 – Bruce 2016-08-25 00:37:49

9

如果View的高度/寬度= WRAP_CONTENT - >使用:

android:layout_centerHorizontal="true" 
android:layout_centerVertical="true" 

如果View的高度/寬度= match_parent - >使用:

android:gravity="center_vertical|center_horizontal" 
0

添加兩個android:layout_centerInParentandroid:layout_centerVertical工作讓我中心ImageView垂直和水平:

<ImageView 
    .. 
    android:layout_centerInParent="true" 
    android:layout_centerVertical="true" 
    />