Проблема определения размера ConstraintLayout - PullRequest
0 голосов
/ 01 апреля 2020

У меня проблема с размером детей в ConstraintLayout. У меня есть 3 просмотра:

  • TextView (item_quantity): я хочу, чтобы это росло бесконечно, но не pu sh the TextInputLayout с экрана
  • TextInputLayout (data_entry_layout): я хочу, чтобы это заполнило все доступное горизонтальное пространство и имело минимальную ширину 120dp независимо от того, что
  • ImageView (camera_scan): это не будет расти, просто не должен отталкиваться от экрана

Если item_quantity имеет короткий текст, я хочу, чтобы он выглядел как на рисунке ниже. Я хочу, чтобы data_entry_layout заполнил все доступное пространство.

short text version

Если item_quantity имеет длинный текст, я хочу, чтобы он заполнялся и увеличивался, но я хочу data_entry_layout никогда не будет меньше 120dp. Я хочу, чтобы почтить minWidth. Итак, я хочу, чтобы это выглядело так:

long text version

Вот моя текущая конфигурация:

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_constraintTop_toTopOf="parent"
    android:paddingTop="10dp"
    android:paddingBottom="10dp">

    <TextView
        android:id="@+id/item_quantity"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constrainedWidth="true"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@id/data_entry_layout"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintVertical_chainStyle="spread_inside"
        android:paddingStart="10dp"
        android:paddingEnd="10dp"
        android:text="90,000 Boxes of Stuff Are Needed"
        android:textColor="@color/color_on_background"
        android:textSize="@dimen/workflow_item_view_item_quantity_text_size" />

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/data_entry_layout"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintEnd_toStartOf="@id/camera_scan"
        app:layout_constraintStart_toEndOf="@id/item_quantity"
        app:layout_constraintVertical_chainStyle="spread_inside"
        android:contentDescription="@string/disable_realwear_asr"
        android:paddingStart="10dp"
        android:paddingEnd="10dp"
        android:minWidth="120dp"
        app:errorIconDrawable="@null">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/data_entry"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="@dimen/activity_instruction_data_entry_text_size"/>
    </com.google.android.material.textfield.TextInputLayout>

    <ImageView
        android:id="@+id/camera_scan"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginEnd="5dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toBottomOf="@id/data_entry_layout"
        app:layout_constraintTop_toTopOf="@id/data_entry_layout"
        android:background="@android:color/transparent"
        android:clickable="true"
        android:foreground="@drawable/ripple_selector"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:src="@drawable/qrcode_scan"
        android:visibility="visible"
        tools:ignore="ContentDescription,KeyboardInaccessibleWidget" />
</androidx.constraintlayout.widget.ConstraintLayout>

Если я установил item_quantity * layout_width до 0dp, тогда пользовательский интерфейс работает с большим количеством текста, но занимает слишком много горизонтального пространства с коротким текстом:

0dp looks bad with short text

Если я установлю item_quantity layout_width на wrap_content, то пользовательский интерфейс работает с коротким текстом, но отталкивает data_entry_layout с экрана крупным текстом:

wrap_content looks bad with long text

Мне, должно быть, не хватает чего-то простого. Есть ли способ заставить обе эти ситуации делать то, что я хочу?

1 Ответ

2 голосов
/ 01 апреля 2020

Вместо использования свойства android:minWidth попробуйте использовать app:layout_constraintWidth_min. ConstraintLayout, кажется, либо игнорирует, либо переопределяет определенные свойства с пространством имен «android», когда дело касается размеров элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...