ОБНОВЛЕНИЕ ИЮЛЬ 2018:
Если вы используете ConstraintLayout 1.1.0
, правильное свойство - app:layout_constrainedWidth="true"
вместо старого app:layout_constraintWidth_default="wrap"
(и аналог высоты). Смотрите обновленный ответ.
ОБНОВЛЕНИЕ НОЯБРЯ 2017:
Если вы используете ConstraintLayout 1.0.0
стабильный (или выше) (в настоящее время 1.0.2), см. Обновленный Ответ для более простого решения без необходимости вложения макетов.
Оригинальный вопрос:
Использование ConstraintLayouts-Beta3
выпущенного 3 ноября 2016 г. (источник)
Я пытаюсь сделать следующее:
| |
|<-[TextView]<->[ImageView] -----------> |
| |
Что я достиг с макетом, например, так:
<TextView
android:id="@+id/textView"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toLeftOf="@+id/caret"
app:layout_constraintHorizontal_bias="0.0"
android:text="Some Text"
android:textAlignment="viewStart"
android:gravity="start" />
<ImageView
android:id="@+id/caret"
android:layout_width="wrap_content"
android:layout_height="8dp"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintLeft_toRightOf="@+id/textView"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@+id/textView"
app:layout_constraintBottom_toBottomOf="@+id/textView"
app:layout_constraintHorizontal_bias="0.0"
android:contentDescription=""
app:srcCompat="@drawable/ic_selection"
android:layout_marginStart="8dp"/>
Это выглядит нормально, но когда текст длиннее доступного пространства...
| |
|<-[TextView Larger Than The Space Avail]|
| |
Текстовое представление имеет стиль, который определяет это:
<item name="android:lines">1</item>
<item name="android:maxLines">1</item>
<item name="android:ellipsize">end</item>
Так что это должно работать, но я не уверен, какие ограничения мне нужны, чтобы изображение сдвигалось вправо, а затем останавливалось и позволяло текстовому представлению понять, что места больше нет.
Что мне не хватает?
Примечание: если я установлю ширину textview равной 0dp, это сработает, но тогда изображение всегда будет справа (горизонтальное смещение, по-видимому, игнорируется)
Примечание 2: я пробовал это и с бета2, на самом деле, похоже, что в бета3 есть ошибка в визуальном редакторе.
ОБНОВЛЕНИЕ: я попытался повторить это в Xcode/AutoLayout:
Вот как это выглядит с коротким текстом
Теперь та же схема, я просто набираю длинный текст в текстовом представлении…
Как видите, ограничение следа (справа) для вида изображения говорит: вы на 8 или более точках от правого поля.
Он также прикреплен слева к метке (textView).
Из того, что я только что узнал из Twitter, это может быть невозможно в Android ConstraintLayout в данный момент: Source