android: 使用相对布局在列表项中定位视图元素

android: using relative layout to position view elements inside a list item

我正在尝试使用 RelativeLayout 设计类似于下图 (source) 的列表项。

在我的例子中,itens 将是:

  1. ImageView (interval_icon)
  2. 简单的文本视图(interval_start
  3. 另一个 TextView (interval_end)

代码是这样的:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingTop="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_horizontal_margin"
android:gravity="center"
android:minHeight="?android:attr/listPreferredItemHeight" >

    <ImageView
       android:layout_width="wrap_content"
       android:layout_height="fill_parent"
       android:src="@drawable/image"
       android:layout_alignParentLeft="true"
       android:id="@+id/interval_icon"
    />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:text="Start"
        android:id="@+id/interval_start"
        android:layout_toRightOf="@+id/interval_icon"
        android:layout_alignParentRight="true"
       />


    <TextView
        android:id="@+id/interval_end"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="End"
        android:layout_below="@+id/interval_start"
        android:layout_toRightOf="@+id/interval_icon"/>

</RelativeLayout>

但是结果是这样的:

在这种情况下,两个 editText 位于图像的中间。 我需要做哪些修改才能像示例图像中那样定位我的物体?

可以通过将 TextView 放在布局中并使用您 link 提供的 material 设计列表组件 sheet 来实现。

这是我所做的 Material

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/interval_icon"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="20dp"
        android:src="@drawable/ic_action_heart_48d" />

    <RelativeLayout
        android:id="@+id/rel1"
        android:layout_width="wrap_content"
        android:layout_height="62dp"
        android:paddingLeft="72dp"
        android:paddingRight="16dp">

        <TextView
            android:id="@+id/interval_start"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:paddingBottom="2dp"
            android:text="Start"
            android:singleLine="true"
            android:textColor="#000000"
            android:textSize="16sp" />

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="62dp"
        android:layout_below="@+id/rel1"
        android:layout_centerVertical="true"
        android:paddingLeft="72dp"
        android:paddingRight="16dp">


        <TextView
            android:id="@+id/interval_end"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:text="End"
            android:singleLine="true"
            android:textColor="#000000"
            android:textSize="16sp" />

    </RelativeLayout>


</RelativeLayout>

XML android:layout_centerVertical="true" 使布局垂直移动到父布局的中心。进一步添加一些填充以满足 Material 准则,使其具有所需的外观和感觉。您还可以根据需要更改 ImageViewTextView 的大小,尽管遵循代码中的准则。

干杯,Gaurav

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minHeight="?android:attr/listPreferredItemHeight"
android:paddingBottom="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_horizontal_margin">

<ImageView
    android:id="@+id/interval_icon"
    android:layout_width="30dp"
    android:layout_height="50dp"
    android:layout_alignParentLeft="true"
    android:src="@drawable/image" />

<TextView
    android:id="@+id/interval_start"
    android:layout_width="fill_parent"
    android:layout_height="50dp"
    android:layout_alignParentRight="true"
    android:layout_alignTop="@id/interval_icon"
    android:layout_toRightOf="@+id/interval_icon"
    android:text="Start" />

<TextView
    android:id="@+id/interval_end"
    android:layout_width="fill_parent"
    android:layout_height="50dp"
    android:layout_below="@+id/interval_start"
    android:layout_marginTop="10dp"
    android:layout_toRightOf="@+id/interval_icon"
    android:text="End" />