两个TextView并排,只有一个椭圆形?

Fel*_*lix 64 android android-layout

我希望两个TextView元素并排显示(在列表项中),一个元素向左对齐,一个向右对齐.就像是:

|<TextView>               <TextView>|
Run Code Online (Sandbox Code Playgroud)

(|代表屏幕的四肢)

但是,TextView左侧的内容可能太长而无法放在屏幕上.在这种情况下,我想让它椭圆形但仍然显示完整的权利TextView.就像是:

|This is a lot of conte...<TextView>|
Run Code Online (Sandbox Code Playgroud)

我在此进行过多次尝试,同时使用LinearLayoutRelativeLayout,和我想出了唯一的解决办法是使用RelativeLayout,把一个marginRight在左边TextView足够大的权明确TextView.但是,你可以想象,这不是最佳选择.

还有其他解决方案吗?

最终LinearLayout解决方案:

<LinearLayout
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:orientation="horizontal"
    >
    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_weight="1"
        android:ellipsize="end"
        android:inputType="text"
        />
    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_weight="0"
        android:layout_gravity="right"
        android:inputType="text"
        />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

旧的,TableLayout解决方案:

<TableLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:stretchColumns="1"
    android:shrinkColumns="0"
    >
    <TableRow>
        <TextView android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:singleLine="true"
            />
        <TextView android:id="@+id/date"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:singleLine="true"
            android:ellipsize="none"
            android:gravity="right"
            />
    </TableRow>
</TableLayout>
Run Code Online (Sandbox Code Playgroud)

cap*_*ler 19

只是一个想法,为什么不首先在xml布局中声明右边的textview并将其宽度设置为换行内容,android:layout_alignParentRight="true"以及android:gravity="right".然后在左侧声明textview,将其宽度设置为fill parent,android:layout__toLeftOf= {右侧textview的id} RelativeView作为根视图.

通过首先声明正确的文本视图,将首先计算其所需的宽度并占据视图,而左侧的文本视图将占据视图的剩余空间.

我仍然没有试过这个,虽然它可能会给你一些想法.

[更新]

我尝试创建一个xml资源布局......它以某种方式工作......

<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  <TextView 
    android:id="@+id/right"
    android:layout_alignParentRight="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="right"
    android:text="right"
    >
  </TextView>
  <TextView 
    android:id="@+id/left"
    android:layout_alignParentLeft="true"
    android:layout_toLeftOf="@id/right"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:ellipsize="end"
    android:lines="1"
    android:singleLine="true"
    android:maxLines="1"
    android:text="too looooooooooong ofskgjo sdogj sdkogjdfgds dskjgdsko jgleft"
    >
  </TextView>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)


dav*_*pcj 17

LinearLayout的答案对我有同样的问题.作为一个单独的答案发布,因为不清楚什么做了什么和没有为提问者工作.

一个区别.TableLayout对我来说不太理想,因为我有两行数据,我希望底行按照这个问题描述的行为,以及跨越该区域的顶行.这个问题已在另一个SO问题中得到解答:TableLayout中的Colspan,但LinearLayout更简单.

虽然获得正确的宽度花了我一点.我0dp在扩展项目中包含了使用宽度的android lint调整以获得性能.

<LinearLayout
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:orientation="horizontal"
    >
    <TextView
        android:layout_height="wrap_content"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:ellipsize="end"
        android:inputType="text"
        />
    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_weight="0"
        android:layout_gravity="right"
        android:inputType="text"
        />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的答案,因为从性能角度来看,最好使用LinearLayout而不是Table(或Relative)来表示这种情况 (2认同)

ud_*_*_an 15

使用TableLayout并将TextView放在表行中,试一试.我没试过