Как установить ширину в процентах с максимальной шириной в дп? - PullRequest
1 голос
/ 17 мая 2019

У меня есть ImageView, который должен растягиваться с шириной экрана. Но я не хочу, чтобы вид растягивался до бесконечности. Мне также нужно сохранить соотношение изображения до 16: 9. Мне трудно установить максимальную ширину при использовании процентов в ConstraintLayout. Я обнаружил, что соотношение можно установить с помощью ConstraintLayout, но использовать этот макет не обязательно, пока это соотношение будет сохранено (обратите внимание, что я не могу использовать стороннюю библиотеку, кроме Glide). Вот что у меня сейчас.

<?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="wrap_content">

    <ImageView
        android:id="@+id/list_item_image"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintDimensionRatio="16:9"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@id/list_item_title"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintWidth_percent="0.5"
        app:layout_constraintWidth_max="163dp"
        tools:src="@color/white" />

    <TextView
        android:id="@+id/list_item_title"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/list_item_image"
        app:layout_constraintTop_toTopOf="parent"
        tools:text="Test Title" />

</android.support.constraint.ConstraintLayout>

Без app:layout_constraintWidth_max все работает нормально, но как только этот атрибут установлен, процент перестает работать вообще, и для ширины устанавливается какое-то произвольное значение (определенно не 163dp, который я использовал). Но самое интересное в том, что если максимальная ширина больше половины ширины экрана, процент снова работает. Кажется, что эти два атрибута не могут работать вместе, но я не знаю, как еще определить, что мне нужно делать.

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

Действительно, кажется, что объединение app:layout_constraintWidth_percent="0.5" и app:layout_constraintWidth_max вместе не позволяет получить ожидаемый результат. Обходной путь для этого должен был бы использовать Guideline, чтобы ограничить ImageView желаемым процентом. Затем вы можете ограничить начало TextView до Guideline или до конца ImageView, в зависимости от того, что вы хотите:

<?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="wrap_content">

    <android.support.constraint.Guideline
            android:id="@+id/guideline"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintGuide_percent="0.5" />

    <ImageView
            android:id="@+id/list_item_image"
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:layout_constraintDimensionRatio="16:9"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toStartOf="@id/guideline"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintWidth_max="163dp"
            tools:src="@android:color/black" />

    <TextView
            android:id="@+id/list_item_title"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@id/list_item_image"
            app:layout_constraintTop_toTopOf="parent"
            tools:text="Test Title" />

</android.support.constraint.ConstraintLayout>
0 голосов
/ 17 мая 2019

Вы можете сделать это без макета ограничений, вы можете использовать LinearLayout или RelativeLayout, установить ширину изображения, чтобы соответствовать родительскому, и масштабировать ваше изображение до

enter image description here

Ссылкадля деталей: https://thoughtbot.com/blog/android-imageview-scaletype-a-visual-guide

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