根据字符串长度截断 TextView
Truncate TextView based on String length
我正在尝试实现两个 TextView 的布局,即。 tv_username 和 tv_date 并排对齐。如果用户名很短,用户名和日期应该完整显示,如果名称很长,用户名应该在末尾截断,日期应该完整显示。像这样:-
在任何情况下,两个 TextView 之间的间距最大为 5dp,即日期应始终位于用户名的右侧,边距为 5dp,并且在父级中不与右对齐。我已经尝试了下面的代码,但是它用更长的用户名将日期 Textview 推出了屏幕:-
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/value_3"
android:padding="@dimen/value_5"
android:paddingEnd="@dimen/value_10"
android:paddingStart="@dimen/value_10"
android:paddingTop="@dimen/value_5">
<android.support.v7.widget.AppCompatTextView
android:id="@+id/tv_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="@integer/value_1"
android:text="Samantha George Jefferson and some more text"
android:textColor="@color/colorPrimary"
android:textSize="@dimen/size_fourteen"
android:layout_alignParentStart="true"/>
<android.support.v7.widget.AppCompatTextView
android:id="@+id/tv_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/value_5"
android:layout_alignParentRight="true"
android:text="@string/friendly_date"
android:textColor="@color/colorBlack_a38"
android:textSize="@dimen/size_twelv"/>
</RelativeLayout>
如有任何帮助,我们将不胜感激。
更新
我用了ConstraintLayout
但是结果是一样的
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.AppCompatTextView
android:id="@+id/tv_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="@integer/value_1"
android:text="Johnvfvjdfjgdkjhgjdgdjkghdjkghkjdhgdhgdgjkhjdfg"
android:textColor="@color/colorPrimary"
android:textSize="@dimen/size_fourteen"
android:layout_alignParentStart="true"/>
<android.support.v7.widget.AppCompatTextView
android:id="@+id/tv_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/value_5"
android:layout_alignParentRight="true"
android:text="@string/friendly_date"
android:textColor="@color/colorBlack_a38"
app:layout_constraintLeft_toRightOf="@+id/tv_username"
android:textSize="@dimen/size_twelv"/>
</android.support.constraint.ConstraintLayout>
您需要做的就是将以下行添加到您的 tv_username
TextView
这是
android:singleLine="true"
android:maxLines="1"
android:toLeftOf="+@id/tv_date"
android:toStartOf="+@id/tv_date"
android:ellipsize="end|right"
它的工作方式是一旦你的 tv_date
被绘制在最后 tv_username
就会被绘制,如果它需要的 space 多于可用的[=14],它将被截断=]
您可以使用 TableLayout 实现此目的
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:shrinkColumns="0">
<TableRow>
<android.support.v7.widget.AppCompatTextView
android:id="@+id/tv_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/lorem"
android:textColor="@color/colorPrimary"
android:textSize="14sp" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/tv_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="1 hour ago"
android:textColor="#5000"
android:textSize="12sp" />
</TableRow>
</TableLayout>
TableLayout 可以做你想做的事,如@m4n3k4s 所述,但如果你想用 ConstraintLayout 做,那么只需将它添加到 xml 布局
中的 TextView
android:maxLines="1"
android:maxWidth="160dp"
显然将 maxWidth 设置为您想要的值。
我正在尝试实现两个 TextView 的布局,即。 tv_username 和 tv_date 并排对齐。如果用户名很短,用户名和日期应该完整显示,如果名称很长,用户名应该在末尾截断,日期应该完整显示。像这样:-
在任何情况下,两个 TextView 之间的间距最大为 5dp,即日期应始终位于用户名的右侧,边距为 5dp,并且在父级中不与右对齐。我已经尝试了下面的代码,但是它用更长的用户名将日期 Textview 推出了屏幕:-
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/value_3"
android:padding="@dimen/value_5"
android:paddingEnd="@dimen/value_10"
android:paddingStart="@dimen/value_10"
android:paddingTop="@dimen/value_5">
<android.support.v7.widget.AppCompatTextView
android:id="@+id/tv_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="@integer/value_1"
android:text="Samantha George Jefferson and some more text"
android:textColor="@color/colorPrimary"
android:textSize="@dimen/size_fourteen"
android:layout_alignParentStart="true"/>
<android.support.v7.widget.AppCompatTextView
android:id="@+id/tv_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/value_5"
android:layout_alignParentRight="true"
android:text="@string/friendly_date"
android:textColor="@color/colorBlack_a38"
android:textSize="@dimen/size_twelv"/>
</RelativeLayout>
如有任何帮助,我们将不胜感激。
更新
我用了ConstraintLayout
但是结果是一样的
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.AppCompatTextView
android:id="@+id/tv_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="@integer/value_1"
android:text="Johnvfvjdfjgdkjhgjdgdjkghdjkghkjdhgdhgdgjkhjdfg"
android:textColor="@color/colorPrimary"
android:textSize="@dimen/size_fourteen"
android:layout_alignParentStart="true"/>
<android.support.v7.widget.AppCompatTextView
android:id="@+id/tv_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/value_5"
android:layout_alignParentRight="true"
android:text="@string/friendly_date"
android:textColor="@color/colorBlack_a38"
app:layout_constraintLeft_toRightOf="@+id/tv_username"
android:textSize="@dimen/size_twelv"/>
</android.support.constraint.ConstraintLayout>
您需要做的就是将以下行添加到您的 tv_username
TextView
这是
android:singleLine="true"
android:maxLines="1"
android:toLeftOf="+@id/tv_date"
android:toStartOf="+@id/tv_date"
android:ellipsize="end|right"
它的工作方式是一旦你的 tv_date
被绘制在最后 tv_username
就会被绘制,如果它需要的 space 多于可用的[=14],它将被截断=]
您可以使用 TableLayout 实现此目的
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:shrinkColumns="0">
<TableRow>
<android.support.v7.widget.AppCompatTextView
android:id="@+id/tv_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/lorem"
android:textColor="@color/colorPrimary"
android:textSize="14sp" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/tv_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="1 hour ago"
android:textColor="#5000"
android:textSize="12sp" />
</TableRow>
</TableLayout>
TableLayout 可以做你想做的事,如@m4n3k4s 所述,但如果你想用 ConstraintLayout 做,那么只需将它添加到 xml 布局
中的 TextViewandroid:maxLines="1"
android:maxWidth="160dp"
显然将 maxWidth 设置为您想要的值。