【问题标题】:Cut text and add ellipses when TextView is overlapping another TextView当 TextView 与另一个 TextView 重叠时剪切文本并添加省略号
【发布时间】:2015-07-30 21:44:24
【问题描述】:

我正在尝试在 Facebook Messenger for android 中构建一个聊天单元布局。我能够轻松地复制这种布局。我在名称中添加了一个 maxLine 参数,以防它真的很长,如果是这种情况,它将显示省略号。问题是如果这个人的名字真的很长,省略号将不会出现,我的时间戳将是 2 个字符长 2 个字符 TextView that shows the timestamp。我也在使用 CirceImageView 库。

Build.graddle

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.1'
    compile 'com.android.support:design:22.2.1'
    compile 'de.hdodenhof:circleimageview:1.3.0'
}

layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="72dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="8dp"
    android:paddingBottom="8dp">
    <de.hdodenhof.circleimageview.CircleImageView
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/profile_image"
        android:layout_width="56dp"
        android:layout_height="56dp"
        android:src="@drawable/bob"
        android:layout_marginRight="16dp"
        app:border_width="0dp"
        app:border_color="#FF000000"/>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_toStartOf="@id/lblMessageTime"
                android:text="Person name is lonnnnnnnnnnnnnng"
                android:id="@+id/person_name"
                android:textSize="15sp"
                android:textColor="#000000"
                android:layout_toLeftOf="@id/textTime"
                android:textStyle="bold"
                android:ellipsize="end"
                android:maxLines="1" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingLeft="8dp"
                android:text="23:00"
                android:layout_weight="1"
                android:layout_alignParentRight="true"
                android:layout_alignBaseline="@id/person_name"
                android:id="@+id/lblMessageTime"/>
        </LinearLayout>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/grayAddSessionButton"
            android:id="@+id/textMessage"
            android:text="This is a message"/>
    </LinearLayout>
</LinearLayout>

感谢您的帮助!

【问题讨论】:

    标签: android android-layout android-activity android-xml


    【解决方案1】:

    如果您想避免重叠,您不应该使用RelativeLayout 作为TextViews 的容器,或者不要将wrap_content 用于android:layout_width 的person_name TextView,但使其宽度固定(即“200dp ") 或扩展 TextView 类并使其禁止任何超出特定宽度的拉伸。

    【讨论】:

    • 我还尝试使用包含线性布局的嵌套布局,该布局具有名称和时间戳。我将 1 的 layout_weight 放入时间戳。它没有按计划工作。虽然没有被名称覆盖,但时间戳是 1 个字符长,5 个字符高。
    【解决方案2】:

    我找到了一种很容易做到这一点的方法。我将 android:layout_weight="1" 删除到时间戳,并将 android:layout_weight=".5" 添加到名称 TextView。由于名称 TextView 是唯一具有权重且小于 1 的名称,因此如果包含该名称的 TextView 与时间戳 (see image) 重叠,则不会完全显示它。

    这是新代码:

    Layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal" android:layout_width="match_parent"
        android:layout_height="72dp"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        android:paddingTop="8dp"
        android:paddingBottom="8dp">
        <de.hdodenhof.circleimageview.CircleImageView
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/profile_image"
            android:layout_width="56dp"
            android:layout_height="56dp"
            android:src="@drawable/bob"
            android:layout_marginRight="16dp"
            app:border_width="0dp"
            app:border_color="#FF000000"/>
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:text="This name is really long but it is cut"
                    android:id="@+id/person_name"
                    android:textSize="15sp"
                    android:textColor="#000000"
                    android:layout_toLeftOf="@id/textTime"
                    android:textStyle="bold"
                    android:ellipsize="end"
                    android:layout_weight=".5"
                    android:maxLines="1"/>
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:paddingLeft="8dp"
                    android:text="23:00"
                    android:layout_alignParentRight="true"
                    android:id="@+id/lblMessageTime"/>
            </LinearLayout>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@color/grayAddSessionButton"
                android:id="@+id/textMessage"
                android:text="This is a message"/>
        </LinearLayout>
    </LinearLayout>
    

    【讨论】:

      猜你喜欢
      • 2020-12-18
      • 2013-09-15
      • 1970-01-01
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      相关资源
      最近更新 更多