Android TextView 截断优先级或压缩阻力
Android TextView Truncation Priority or Compression Resistance
我在屏幕上水平放置了 3 个视图(固定大小的图像和 2 个单行文本视图:leftTextView
和 rightTextView
)并且我正在尝试获取 rightTextView
紧贴 leftTextView
,但如果两个标签的宽度都超过屏幕尺寸,则截断 leftTextiew
。
所需功能示例:
|img|leftText|rightText| ||(end of screen)
|img|leftTextMedium|rightText| ||
|img|leftTextTooLongSoTrunc...|rightText||
实际情况:
|img|leftText|rightText| ||(end of screen)
|img|leftTextPrettyLongButNotHuge|rightT||
|img|leftTextWhichIsIncrediblyLongBlahBl||
目前,如果两个文本视图的大小都超过了视图的宽度,rightTextView
最终会被压扁以腾出空间,即使我已经在 [=15] 上设置了 android:ellipsize="end"
=].
有没有办法让 leftTextView
有一个 "truncation priority",如果它会导致其他视图不适合,它应该截断?或者在另一边,我可以将 rightTextView
设置为 "compression resistance" 以防止它被挤压以为 leftTextView
腾出空间吗?这是我的示例 XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/fixedWidthImage"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:id="@+id/leftTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@+id/fixedWidthImage"
android:layout_toRightOf="@id/fixedWidthImage"
android:maxLines="1"
android:textSize="18sp"
android:ellipsize="end" />
<TextView
android:id="@+id/rightTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@+id/leftTextView"
android:layout_toRightOf="@+id/leftTextView"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:maxLines="1"
android:textSize="12sp" />
</RelativeLayout>
我尝试过的事情:
- 在
leftTextView
中添加 toStartOf
/ toLeftOf
rightTextView
(应用程序崩溃)
不是将 rightTextView
对齐到 [=15= 的 end/right,而是将其翻转并将 leftTextView
对齐到 start/left 的 rightTextView
。这导致 rightTextView
锚定在屏幕的末尾,而不是直接锚定在 leftTextView
的右侧。最终结果的示例:
|img|leftText |rightText||
|img|leftTextMedium |rightText||
|img|leftTextTooLongSoTrunc...|rightText||
即使我设置 android:minWidth="25dp"
只是为了确保 rightTextView
的至少 部分 可见(我不想要这样做,因为这个文本长度是可变的)它仍然最终压缩宽度以为 leftTextView
.
腾出空间
- 根据 Emanuel Moecklin 的回答,我尝试用
LinearLayout
包装并在 leftTextView
上设置权重。结果在视觉上与我在 #2 中尝试的完全相同。
这是我的做法:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/fixedWidthImage"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/ic_launcher_pro" />
<TextView
android:id="@+id/leftTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical|left"
android:ellipsize="marquee"
android:lines="1"
android:text="This is a very long text, and now even longer" />
<TextView
android:id="@+id/rightTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|left"
android:lines="1"
android:text="This is also quite long" />
</LinearLayout>
android:layout_weight="1" 在此处执行 "trick"。不过,关于这方面的文档还不是很清楚:
For example, if there are three text fields and two of them declare a
weight of 1, while the other is given no weight, the third text field
without weight will not grow and will only occupy the area required by
its content.
(https://developer.android.com/guide/topics/ui/layout/linear.html#Weight)
它没有详细说明没有 space 可填充但不足以 space 用于所有视图的情况。对上述文档的一种解释是,没有权重的字段(在本例中为 rightTextView)将占据其内容所需的区域,而有权重的字段(在本例中为 leftTextView)将 "grow"(如负增长)而这正是发生的事情。
我认为您需要进行自定义布局。这适用于我制作的示例,它满足您在上面发布的所有要求,但您需要添加更多的数学代码来解释 layout_margins 和填充。
这里发生的事情的基本思想是我将 LinearLayout 子类化,并在 onMeasure 通道中检查以确保右视图可以选择占用尽可能多的 space。请注意,我必须重新测量正确的视图,而不仅仅是获得测量的宽度,因为 linearlayout 不会提供足够的 space。一旦您知道右视图占用了多少空间,请检查中间视图(称为 leftView...抱歉)占用的空间是否比您想要的多 space。如果是这样,就把剩下的 space 给它。
根据您对它在 RecyclerView 中的要求...我知道您说过您想要一个纯粹的 xml 解决方案,但是如果您在代码中将其处理为 xml 1. 可能是不可能的,并且 2. 需要比直接自己做更多的计算。
public class CustomLinearLayout extends LinearLayout {
private View child0;
private TextView leftView, rightView;
public CustomLinearLayout(Context context) {
super(context);
}
public CustomLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (rightView == null) {
child0 = getChildAt(0);
leftView = (TextView)getChildAt(1);
rightView = (TextView) getChildAt(2);
}
int spec = MeasureSpec.makeMeasureSpec(getMeasuredWidth(), MeasureSpec.AT_MOST);
rightView.measure(spec, spec);
int remaining = getMeasuredWidth() - child0.getMeasuredWidth() - rightView.getMeasuredWidth();
if (leftView.getMeasuredWidth() > remaining) {
int specW = MeasureSpec.makeMeasureSpec(remaining, MeasureSpec.AT_MOST);
int specH = MeasureSpec.makeMeasureSpec(leftView.getMeasuredHeight(), MeasureSpec.EXACTLY);
leftView.measure(specW, specH);
}
}
XML布局
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.joshua.myapplication.MainActivity">
<com.example.joshua.myapplication.CustomLinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:background="#FF0000"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textSize="18sp"
android:text="My Left View With Really Really Long Text That should fill the screen"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:textSize="18sp"
android:text="My Right View"
/>
</com.example.joshua.myapplication.CustomLinearLayout>
<com.example.joshua.myapplication.CustomLinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="20dp">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:background="#FF0000"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textSize="18sp"
android:text="My Left View with short text"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:textSize="18sp"
android:text="My Right View"
/>
</com.example.joshua.myapplication.CustomLinearLayout>
</LinearLayout>
只需使用 android:maxWidth
属性 到您的左侧 textView。所以,你的左视图永远不会超过这个限制。总会有 space 适合你的观点。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/fixedWidthImage"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/leftTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toEndOf="@+id/fixedWidthImage"
android:layout_toRightOf="@+id/fixedWidthImage"
android:ellipsize="end"
android:lines="1"
android:maxWidth="250dp"
android:text="This is a Long left Text which never ends and You'll be tired after reading this long stuff.. blah blah... " />
<TextView
android:id="@+id/rightTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toEndOf="@+id/leftTextView"
android:layout_toRightOf="@+id/leftTextView"
android:ellipsize="end"
android:lines="1"
android:text="Right Text" />
</RelativeLayout>
但是,解决方案的限制是您必须在 maxWidth 属性 中给出固定值。因此,它会在不同的屏幕尺寸上显示不同的外观。不过,在大多数情况下,您不会遇到问题。
此外,对于在单行中显示长文本视图,android:ellipsize="marquee"
是不错的选择。因为它会水平滚动你的视图。但是不要忘记在您的代码中写入此 textView.setSelected(true)
以使其工作。 Detail
您可以通过 TableLayout
和 shrinkColumns
属性存档此布局。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Row 1 -->
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:shrinkColumns="1">
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:maxLines="1"
android:ellipsize="end"
android:text="leftText"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:maxLines="1"
android:ellipsize="none"
android:text="rightText"/>
</TableRow>
</TableLayout>
<!-- Row 2 -->
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:shrinkColumns="1">
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:maxLines="1"
android:ellipsize="end"
android:text="leftTextPrettyLongButNotHuge"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:maxLines="1"
android:ellipsize="none"
android:text="rightText"/>
</TableRow>
</TableLayout>
<!-- Row 3 -->
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:shrinkColumns="1">
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:maxLines="1"
android:ellipsize="end"
android:text="leftTextWhichIsIncrediblyLongBlahBlahBlahBlah"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:maxLines="1"
android:ellipsize="none"
android:text="rightText"/>
</TableRow>
</TableLayout>
</LinearLayout>
我在屏幕上水平放置了 3 个视图(固定大小的图像和 2 个单行文本视图:leftTextView
和 rightTextView
)并且我正在尝试获取 rightTextView
紧贴 leftTextView
,但如果两个标签的宽度都超过屏幕尺寸,则截断 leftTextiew
。
所需功能示例:
|img|leftText|rightText| ||(end of screen)
|img|leftTextMedium|rightText| ||
|img|leftTextTooLongSoTrunc...|rightText||
实际情况:
|img|leftText|rightText| ||(end of screen)
|img|leftTextPrettyLongButNotHuge|rightT||
|img|leftTextWhichIsIncrediblyLongBlahBl||
目前,如果两个文本视图的大小都超过了视图的宽度,rightTextView
最终会被压扁以腾出空间,即使我已经在 [=15] 上设置了 android:ellipsize="end"
=].
有没有办法让 leftTextView
有一个 "truncation priority",如果它会导致其他视图不适合,它应该截断?或者在另一边,我可以将 rightTextView
设置为 "compression resistance" 以防止它被挤压以为 leftTextView
腾出空间吗?这是我的示例 XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/fixedWidthImage"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:id="@+id/leftTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@+id/fixedWidthImage"
android:layout_toRightOf="@id/fixedWidthImage"
android:maxLines="1"
android:textSize="18sp"
android:ellipsize="end" />
<TextView
android:id="@+id/rightTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@+id/leftTextView"
android:layout_toRightOf="@+id/leftTextView"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:maxLines="1"
android:textSize="12sp" />
</RelativeLayout>
我尝试过的事情:
- 在
leftTextView
中添加toStartOf
/toLeftOf
rightTextView
(应用程序崩溃) 不是将
rightTextView
对齐到 [=15= 的 end/right,而是将其翻转并将leftTextView
对齐到 start/left 的rightTextView
。这导致rightTextView
锚定在屏幕的末尾,而不是直接锚定在leftTextView
的右侧。最终结果的示例:|img|leftText |rightText|| |img|leftTextMedium |rightText|| |img|leftTextTooLongSoTrunc...|rightText||
即使我设置
android:minWidth="25dp"
只是为了确保rightTextView
的至少 部分 可见(我不想要这样做,因为这个文本长度是可变的)它仍然最终压缩宽度以为leftTextView
. 腾出空间
- 根据 Emanuel Moecklin 的回答,我尝试用
LinearLayout
包装并在leftTextView
上设置权重。结果在视觉上与我在 #2 中尝试的完全相同。
这是我的做法:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/fixedWidthImage"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/ic_launcher_pro" />
<TextView
android:id="@+id/leftTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical|left"
android:ellipsize="marquee"
android:lines="1"
android:text="This is a very long text, and now even longer" />
<TextView
android:id="@+id/rightTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|left"
android:lines="1"
android:text="This is also quite long" />
</LinearLayout>
android:layout_weight="1" 在此处执行 "trick"。不过,关于这方面的文档还不是很清楚:
For example, if there are three text fields and two of them declare a weight of 1, while the other is given no weight, the third text field without weight will not grow and will only occupy the area required by its content.
(https://developer.android.com/guide/topics/ui/layout/linear.html#Weight)
它没有详细说明没有 space 可填充但不足以 space 用于所有视图的情况。对上述文档的一种解释是,没有权重的字段(在本例中为 rightTextView)将占据其内容所需的区域,而有权重的字段(在本例中为 leftTextView)将 "grow"(如负增长)而这正是发生的事情。
我认为您需要进行自定义布局。这适用于我制作的示例,它满足您在上面发布的所有要求,但您需要添加更多的数学代码来解释 layout_margins 和填充。
这里发生的事情的基本思想是我将 LinearLayout 子类化,并在 onMeasure 通道中检查以确保右视图可以选择占用尽可能多的 space。请注意,我必须重新测量正确的视图,而不仅仅是获得测量的宽度,因为 linearlayout 不会提供足够的 space。一旦您知道右视图占用了多少空间,请检查中间视图(称为 leftView...抱歉)占用的空间是否比您想要的多 space。如果是这样,就把剩下的 space 给它。
根据您对它在 RecyclerView 中的要求...我知道您说过您想要一个纯粹的 xml 解决方案,但是如果您在代码中将其处理为 xml 1. 可能是不可能的,并且 2. 需要比直接自己做更多的计算。
public class CustomLinearLayout extends LinearLayout {
private View child0;
private TextView leftView, rightView;
public CustomLinearLayout(Context context) {
super(context);
}
public CustomLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (rightView == null) {
child0 = getChildAt(0);
leftView = (TextView)getChildAt(1);
rightView = (TextView) getChildAt(2);
}
int spec = MeasureSpec.makeMeasureSpec(getMeasuredWidth(), MeasureSpec.AT_MOST);
rightView.measure(spec, spec);
int remaining = getMeasuredWidth() - child0.getMeasuredWidth() - rightView.getMeasuredWidth();
if (leftView.getMeasuredWidth() > remaining) {
int specW = MeasureSpec.makeMeasureSpec(remaining, MeasureSpec.AT_MOST);
int specH = MeasureSpec.makeMeasureSpec(leftView.getMeasuredHeight(), MeasureSpec.EXACTLY);
leftView.measure(specW, specH);
}
}
XML布局
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.joshua.myapplication.MainActivity">
<com.example.joshua.myapplication.CustomLinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:background="#FF0000"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textSize="18sp"
android:text="My Left View With Really Really Long Text That should fill the screen"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:textSize="18sp"
android:text="My Right View"
/>
</com.example.joshua.myapplication.CustomLinearLayout>
<com.example.joshua.myapplication.CustomLinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="20dp">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:background="#FF0000"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textSize="18sp"
android:text="My Left View with short text"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="1"
android:textSize="18sp"
android:text="My Right View"
/>
</com.example.joshua.myapplication.CustomLinearLayout>
</LinearLayout>
只需使用 android:maxWidth
属性 到您的左侧 textView。所以,你的左视图永远不会超过这个限制。总会有 space 适合你的观点。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/fixedWidthImage"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/leftTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toEndOf="@+id/fixedWidthImage"
android:layout_toRightOf="@+id/fixedWidthImage"
android:ellipsize="end"
android:lines="1"
android:maxWidth="250dp"
android:text="This is a Long left Text which never ends and You'll be tired after reading this long stuff.. blah blah... " />
<TextView
android:id="@+id/rightTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toEndOf="@+id/leftTextView"
android:layout_toRightOf="@+id/leftTextView"
android:ellipsize="end"
android:lines="1"
android:text="Right Text" />
</RelativeLayout>
但是,解决方案的限制是您必须在 maxWidth 属性 中给出固定值。因此,它会在不同的屏幕尺寸上显示不同的外观。不过,在大多数情况下,您不会遇到问题。
此外,对于在单行中显示长文本视图,android:ellipsize="marquee"
是不错的选择。因为它会水平滚动你的视图。但是不要忘记在您的代码中写入此 textView.setSelected(true)
以使其工作。 Detail
您可以通过 TableLayout
和 shrinkColumns
属性存档此布局。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Row 1 -->
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:shrinkColumns="1">
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:maxLines="1"
android:ellipsize="end"
android:text="leftText"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:maxLines="1"
android:ellipsize="none"
android:text="rightText"/>
</TableRow>
</TableLayout>
<!-- Row 2 -->
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:shrinkColumns="1">
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:maxLines="1"
android:ellipsize="end"
android:text="leftTextPrettyLongButNotHuge"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:maxLines="1"
android:ellipsize="none"
android:text="rightText"/>
</TableRow>
</TableLayout>
<!-- Row 3 -->
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:shrinkColumns="1">
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:maxLines="1"
android:ellipsize="end"
android:text="leftTextWhichIsIncrediblyLongBlahBlahBlahBlah"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="4dp"
android:maxLines="1"
android:ellipsize="none"
android:text="rightText"/>
</TableRow>
</TableLayout>
</LinearLayout>