使用具有调整和对齐问题的相对布局

Using relative layout with adjustment and alignment issues

Android Studio 1.2

你好,

我有这个相对布局,它将成为列表视图中的一行。所以我想保持相对布局以提高性能,因为会有很多滚动。

问题,我似乎无法正确对齐。这就是我所拥有的:

下面是我设计的线框,上面应该是这样的:

日期和时间没问题。首先,只是 Correct 20Incorrect 18 的对齐,它们应该向右对齐。其次,thumbs upthumbs down 我没有调整它们的大小,我无法让它们像线框一样对齐。

非常感谢您的任何建议,

只是一个简单的问题,设计看起来很无聊,有什么建议可以让它看起来更性感 ;)

<?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="?android:attr/listPreferredItemHeightLarge"
    android:padding="8dp">

    <TextView
        android:id="@+id/tvDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="16 Mar 2015"
        android:textSize="18sp"/>

    <TextView
        android:id="@+id/tvTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true"
        android:text="22:15"
        android:textSize="18sp"/>

    <TextView
        android:id="@+id/tvCorrectTxt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:gravity="left"
        android:text="Correct 20"
        android:textSize="18sp"/>

    <TextView
        android:id="@+id/tvIncorrect"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:gravity="left"
        android:text="Incorrect 18"
        android:textSize="18sp"/>

    <ImageView
        android:id="@+id/ivArrow"
        android:layout_width="15dp"
        android:layout_height="30dp"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginLeft="20dp"
        android:src="@drawable/ic_action_next_item"
        android:scaleType="center"/>

    <ImageView
        android:id="@+id/ivCorrect"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/ivArrow"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_action_good"/>

    <ImageView
        android:id="@+id/ivIncorrect"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/ivArrow"
        android:layout_alignParentBottom="true"
        android:src="@drawable/ic_action_bad"/>

</RelativeLayout>

将主要相对布局更改为 LinearLayout,并在 LinearLayout 内部使用如下相对布局

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" 
    android:layout_height="?android:attr/listPreferredItemHeightLarge"
    android:padding="8dp">
<RelativeLayout 
android:layout_width="match_parent" 
    android:layout_height="?android:attr/listPreferredItemHeightLarge"
    android:padding="8dp">
    <TextView
        android:id="@+id/tvDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="16 Mar 2015"
        android:textSize="18sp"/>

    <TextView
        android:id="@+id/tvTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true"
        android:text="22:15"
        android:textSize="18sp"/>

    <TextView
        android:id="@+id/tvCorrectTxt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:gravity="left"
        android:text="Correct 20"
        android:textSize="18sp"/>

    <TextView
        android:id="@+id/tvIncorrect"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:gravity="left"
        android:text="Incorrect 18"
        android:textSize="18sp"/>

    <ImageView
        android:id="@+id/ivArrow"
        android:layout_width="15dp"
        android:layout_height="30dp"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginLeft="20dp"
        android:src="@drawable/ic_action_next_item"
        android:scaleType="center"/>

    <ImageView
        android:id="@+id/ivCorrect"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/ivArrow"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_action_good"/>

    <ImageView
        android:id="@+id/ivIncorrect"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/ivArrow"
        android:layout_alignParentBottom="true"
        android:src="@drawable/ic_action_bad"/>

</RelativeLayout>
</LinearLayout>

我会为 TextView 使用带有权重的 LinearLayout。像这样:

或者您可以尝试 GridLayout or Support GridLayout

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    app:rowCount="2"
    app:orientation="vertical">

    <TextView
        app:layout_gravity="center_vertical|left"
        android:text="16 Mar 2015"/>

    <TextView
        app:layout_gravity="center_vertical|left"
        android:text="22:15"/>

    <TextView
        app:layout_gravity="center_vertical|right"
        android:text="Correct 20"/>

    <TextView
        app:layout_gravity="center_vertical|right"
        android:text="Incorrect 18"/>

    <ImageView
        app:layout_gravity="center|bottom"
        android:src="..." />
    <ImageView
        app:layout_gravity="center|bottom"
        android:src="..."/>

    <ImageView
        app:layout_gravity="center_vertical"
        app:layout_rowSpan="2"
        android:src="..."/>

</android.support.v7.widget.GridLayout>

您可能需要额外的保证金,或者仍然可以尝试重量。只要您使用 ViewHolder 模式,我认为权重不会导致性能问题。

您可以在那里使用 GridLayout 或 TableLayout,因为您的 activity 确实需要以这种方式组织数据。