#java #android #android-layout #android-linearlayout #android-view
Вопрос:
Поведение, которое я ищу, приведено ниже. Представьте, что скобки [] имеют одинаковый размер max_width
.
- когда
text1
иtext2
в сочетании меньшеmax_width
, скажем, 100dp:[text1short text2short —пустое пространство— ]
- когда
text1
иtext2
в сочетании больше , чемmax_width
, text1 имеет эллиптический размер:[text1sho… text2loooooooooooooooong]
Вот что у меня есть до сих пор, и это работает, но есть ли способ использовать только один макет для достижения этой цели?
<FrameLayout
android:id="@ id/container"
android:layout_width="@dimen/max_width"
android:layout_height="@dimen/some_height">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:id="@ id/text1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:ellipsize="end"
android:maxLines="1" />
<TextView
android:id="@ id/text2"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:maxLines="1"/>
</LinearLayout>
</FrameLayout>
Комментарии:
1. Я бы посоветовал разобраться в
ConstraintLayout
этом иGuidelines
для этого.
Ответ №1:
ConstraintLayout-это правильный путь. Ниже приведен макет, который делает то, что вам нужно. В этот макет включены некоторые ключевые концепции ограничения, такие как цепочки и рекомендации. Цепочка с виджетом ограниченной ширины является ключевой. Руководство менее важно для этого макета и является просто способом ограничить, насколько далеко могут распространяться текстовые представления.
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@ id/tvLeft"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="8dp"
android:ellipsize="end"
android:maxLines="1"
android:text="Short left view."
android:textColor="@color/black"
android:textSize="20sp"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@ id/tvRight"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@ id/tvRight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:maxLines="1"
android:text="Short right"
android:textColor="@color/black"
android:textSize="20sp"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toBottomOf="@id/tvLeft"
app:layout_constraintEnd_toStartOf="@id/guideline"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@ id/tvLeft"
app:layout_constraintTop_toTopOf="@id/tvLeft" />
<androidx.constraintlayout.widget.Guideline
android:id="@ id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="300dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
Вот макет с коротким содержанием:
И с длинным содержимым в левом текстовом представлении:
Изображения взяты из конструктора макетов Android Studio.
Комментарии:
1. Спасибо Cheticamp, в итоге я использовал что-то очень похожее на ваше решение, но без Руководства. Я использовал макет ограничения стиля упакованной цепочки и добавил
layout_constraintWidth_default=wrap
текстовое поле text1, которое хорошо работало. Я нашел это в этой документации: developer.android.com/training/…
Ответ №2:
Я использовал макет ограничения стиля упакованной цепочки и добавил layout_constraintWidth_default=wrap
текстовое поле text1, которое хорошо работало. Я нашел это в этой документации: https://developer.android.com/training/constraint-layout#adjust-the-view-size
<TextView
android:id="@ id/text1"
android:layout_width="0dp"
android:layout_height="@dimen/some_height"
android:ellipsize="end"
android:maxLines="1"
app:layout_constraintHorizontal_weight="1"
app:layout_constraintEnd_toStartOf="@ id/text2"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintWidth_default="wrap"
app:layout_constraintStart_toEndOf="@ id/thing_on_the_left"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:id="@ id/text2"
android:layout_width="wrap_content"
android:layout_height="@dimen/some_height"
android:maxLines="1"
app:layout_constraintEnd_toStartOf="@ id/thing_on_the_right"
app:layout_constraintStart_toEndOf="@ id/text1"
app:layout_constraintTop_toTopOf="parent" />