RelativeLayout 在一条水平线上有两个文本视图,支持省略号

RelativeLayout with two textviews on one horizontal line with ellipsis support

我正在尝试设置一个 RelativeLayout,其中在一行上显示两个 TextView。第一个 TextView 应该左对齐。第二个 TextView 应该右对齐。如果第二个 TextView 文本会扩展到与第一个 TextView 重叠,那么我想在中间省略文本。我不想省略第一个 TextView。

这是我想出来的。问题是第二个 TextView 直接位于第一个 TextView 的右侧,而不是与最右侧对齐。看来我不能同时使用 alignParentRight 和 toRightOf。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/Left"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="[DetailedType]"/>
    <TextView
        android:id="@+id/Right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/Left"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:ellipsize="middle"
        android:singleLine="true"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="[CustomerName]"/>
</RelativeLayout>

实现此 id 的基本思想是在 RelativeLayout 的水平中心添加一个虚拟的不可见视图,并告诉左侧 TextView 在其左侧,右侧 TextView 在它的右边...见下文

关于你右对齐的问题,你应该将TextView拉伸到屏幕的一半,然后在TextView

上设置android:gravity="right"
<?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="match_parent">

    <View
        android:id="@+id/dummy"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        />

    <TextView
        android:id="@+id/Left"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toLeftOf="@id/dummy"
        android:text="[DetailedType]"
        android:textAppearance="?android:attr/textAppearanceMedium"/>


    <TextView
        android:id="@+id/Right"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@id/Left"
        android:gravity="right"
        android:ellipsize="middle"
        android:singleLine="true"
        android:text="[CustomerName]"
        android:textAppearance="?android:attr/textAppearanceMedium"/>
</RelativeLayout>

但您可以随时使用 LinerLayout 作业

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">


    <TextView
        android:id="@+id/Left"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="[DetailedType]"
        android:textAppearance="?android:attr/textAppearanceMedium"/>


    <TextView
        android:id="@+id/Right"
        android:layout_width="0dip"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:ellipsize="middle"
        android:singleLine="true"
        android:text="[CustomerName]"
        android:textAppearance="?android:attr/textAppearanceMedium"/>
</LinearLayout>

据我了解,您只在右视图中错过了 android:gravity="right"