Я пытаюсь выровнять три TextView по горизонтали (как можно предположить из названия), но даже после объединения их в цепочку и использования app:layout_constrainedWidth="true"
они все еще выталкиваются с экрана, как ни странно, только с левой стороны, когдасредний или последний становится большим.Обратите внимание, что я устанавливаю android:maxLines="1"
и android:ellipsize="end"
и выравниваю их в начале экрана, хотя не уверен, что это важно.
Я также пытался ограничить их размеры, но в случае, когда есть два небольших текста и очень большой текст, большой будет эллиптическим, даже если в макете все еще остается свободное место.
Образец макета:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:padding="22dp">
<TextView
android:id="@+id/greenTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@android:color/holo_green_dark"
app:layout_constrainedWidth="true"
app:layout_constraintEnd_toStartOf="@id/blueTextView"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="TextView" />
<TextView
android:id="@+id/blueTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@android:color/holo_blue_dark"
app:layout_constrainedWidth="true"
app:layout_constraintBaseline_toBaselineOf="@id/greenTextView"
app:layout_constraintEnd_toStartOf="@id/orangetextView"
app:layout_constraintStart_toEndOf="@id/greenTextView"
tools:text="Another TextView " />
<TextView
android:id="@+id/orangetextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@android:color/holo_orange_dark"
app:layout_constrainedWidth="true"
app:layout_constraintBaseline_toBaselineOf="@id/blueTextView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/blueTextView"
tools:text="Another TextView" />
</android.support.constraint.ConstraintLayout>
В некоторых случаях используется образец макета
Ни один из TextViews не имеет эллиптической формы:
![First case](https://i.stack.imgur.com/WSVkr.png)
Первый TextView имеет эллиптическое значение:
![Second case](https://i.stack.imgur.com/d1xTA.png)
Последний TextView не имеет эллиптического размера и выталкивает другие изscreen:
![Third case](https://i.stack.imgur.com/T12P2.png)
Вот некоторые возможные решения, которые не охватывают все случаи
Использование android:maxWidth="90dp"
чтобы предотвратить рост TextView, но также без необходимости ограничивать текст:
![Fourth case](https://i.stack.imgur.com/wFjRx.png)
Использование android:layout_width="0dp"
для включения «match_constraint» не является оптимальным решением, так какхорошо, так как макет будет резервировать треть ширины дисплея для каждого TextView, даже если текст меньше, чемчто:
![Fifth case](https://i.stack.imgur.com/Stwoa.png)