Усечение TextView на основе длины строки - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь добиться макета, где два TextViews т.е.tv_username и tv_date должны быть выровнены рядом.Если имя пользователя короткое, имя пользователя и дата должны отображаться полностью, а если имя длинное, имя пользователя должно урезаться в конце, а дата должна отображаться полностью.Примерно так: -

enter image description here

В любом случае оба экрана TextViews имеют максимальный интервал 5dp, т.е. дата всегда должна быть справаимени пользователя с полем 5dp и не выровнен по праву в родительском.Я пробовал приведенный ниже код, но он выталкивает текстовое представление даты с экрана с более длинным именем пользователя: -

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

enter image description here

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

Вы можете достичь этого с помощью 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>
0 голосов
/ 18 сентября 2018

TableLayout может делать то, что вы хотите, как указано @ m4n3k4s, но если вы хотите сделать это с ConstraintLayout, то просто добавьте это в TextView в макете xml

android:maxLines="1"
android:maxWidth="160dp"

Очевидно, установите maxWidth на желаемое значение.

0 голосов
/ 18 сентября 2018

Все, что вам нужно сделать, это добавить следующую строку к вашему 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 будетнарисован и будет обрезан, если ему нужно больше места, чем доступно

...