2013-05-10 108 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" 
    />