This question already has answers here:
Expand TextView with wrap_content until the neighbor view reaches the end of the parent

(7个答案)


4年前关闭。




我在屏幕上水平放置了3个 View (固定大小的图像和2个单行文本 View :leftTextViewrightTextView),并且我试图使rightTextViewleftTextView相对,但如果宽度两个标签中的两个都将超出屏幕尺寸,请截断leftTextiew

所需功能的示例:
|img|leftText|rightText|                ||(end of screen)
|img|leftTextMedium|rightText|          ||
|img|leftTextTooLongSoTrunc...|rightText||

实际发生的情况:
|img|leftText|rightText|                ||(end of screen)
|img|leftTextPrettyLongButNotHuge|rightT||
|img|leftTextWhichIsIncrediblyLongBlahBl||

当前,如果两个文本 View 的大小都超过了 View 的宽度,即使我已经在rightTextView上设置了android:ellipsize="end"leftTextView最终也被压缩以腾出空间。

有没有一种方法可以使leftTextView具有“截断优先级”,即如果它会导致其他 View 不合适,则应截断它?或者在另一侧,我可以将rightTextView设置为具有“抗压缩性”,以防止压缩它来为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对准leftTextView的结尾/右边,而是将其翻转,然后将leftTextView对准rightTextView的开头/左边。这导致rightTextView anchor 定在屏幕的末尾,而不是直接在leftTextView的右侧。最终结果的示例:
    |img|leftText                 |rightText||
    |img|leftTextMedium           |rightText||
    |img|leftTextTooLongSoTrunc...|rightText||
    
  • 即使我设置android:minWidth="25dp"只是为了确保rightTextView的至少一部分可见(我不想这样做,因为此文本长度是可变的),它仍然最终会压缩宽度以为leftTextView腾出空间。
  • 根据Emanuel Moecklin的回答,我尝试将其包装在LinearLayout中并在leftTextView上设置权重。结果在视觉上与我在#2中尝试过的相同。
  • 最佳答案

    您可以通过TableLayoutshrinkColumns属性来归档此布局。

    <?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>
    

    android - Android TextView截断优先级或抗压缩性-LMLPHP

    关于android - Android TextView截断优先级或抗压缩性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38860417/

    10-09 06:25