在RelativeLayout中居中显示两个视图之间的视图

5

我尝试在相对布局中将一个文本视图居中放置在另外两个文本视图之间。其中一个文本视图与父视图顶部对齐,另一个文本视图与父视图底部对齐,第三个文本视图(@id/info)位于两者之间。下面是用于ListView的列表项的视图层次结构:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:listSelector="@drawable/list_selector"
    android:orientation="vertical"
    android:paddingBottom="@dimen/padding_default"
    android:paddingLeft="@dimen/padding_large"
    android:paddingRight="@dimen/padding_large"
    android:paddingTop="@dimen/padding_default" >

    <ImageView
        android:id="@+id/image"
        android:layout_width="65dp"
        android:layout_height="65dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/logo_imageonly" />

    <TextView
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@id/image"
        android:ellipsize="end"
        android:paddingLeft="@dimen/padding_default"
        android:singleLine="true"
        android:textColor="@color/best_prices_item_text_default"
        android:textSize="@dimen/text_size_medium"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/priceQty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_toRightOf="@id/image"
        android:ellipsize="end"
        android:paddingLeft="@dimen/padding_default"
        android:singleLine="true"
        android:textColor="@color/best_prices_item_price"
        android:textSize="@dimen/text_size_small" />

    <TextView
        android:id="@+id/gorceryName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_toRightOf="@id/priceQty"
        android:gravity="right"
        android:singleLine="true"
        android:textColor="@color/best_prices_item_grocery_name"
        android:textSize="@dimen/text_size_xsmall"
        android:textStyle="italic" />

    <TextView
        android:id="@+id/info"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/priceQty"
        android:layout_below="@id/name"
        android:layout_toRightOf="@id/image"
        android:ellipsize="end"
        android:gravity="center_vertical"
        android:paddingLeft="@dimen/padding_default"
        android:singleLine="true"
        android:textColor="@color/best_prices_item_text_default"
        android:textSize="@dimen/text_size_small" />

</RelativeLayout>

在Eclipse视图设计器中,效果与我预期的一样-textview已正确居中: enter image description here 但是当我在设备/模拟器上运行应用程序时,居中的textview消失了。有人遇到过这个问题并能提供帮助吗?

将你的相对布局高度从wrap_content改为match_parent - Piyush
我已经尝试了两种,结果是一样的。 - qbasso
你好,你的问题已经解决了吗?我刚刚在模拟器和Nexus4上尝试了你的布局,它运行良好... 试着改变android:textColor="@color/best_prices_item_text_default"android:textSize="@dimen/text_size_small"的值。 - AlexejWagner.java
当我添加了centerVertical规则时,它几乎可以工作,看起来中间的文本视图几乎居中(我认为它略高于实际中心),但是我发布的原始布局不起作用(缺少中间的文本视图),尽管在Eclipse可视化视图设计器中看起来很好。 - qbasso
2个回答

6
这对我有用:
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/llFullContent"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:text="top"
        android:id="@+id/tvTop"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textAlignment="center"
        android:layout_alignParentTop="true"/>

    <TextView
        android:text="middle"
        android:id="@+id/tvMiddle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/tvBottom"
        android:layout_below="@+id/tvTop"
        android:gravity="center"
        android:textAlignment="center"/>

    <TextView
        android:text="bottom"
        android:id="@+id/tvBottom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textAlignment="center"
        android:layout_alignParentBottom="true"/>

</RelativeLayout>

谢谢,我漏掉了:android:gravity="center" - Abushawish

6
尝试使用android:layout_centerInParent="true"android:layout_centerVertical="true"android:layout_centerHorizontal="true"。希望这有所帮助。有时最好在其他LinearLayout中使用不同方向的几个LinearLayout。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接