Как установить ширину в процентах с максимальной шириной в дп?

У меня есть 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 все работает нормально, но как только этот атрибут установлен, процент перестает работать вообще, а width устанавливается какое-то произвольное значение (определенно не 163dp, которое я использовал). Но самое интересное в том, что если максимальная ширина больше половины ширины экрана, процент снова работает. Кажется, что эти два атрибута не могут работать вместе, но я не знаю, как еще определить, что мне нужно делать.

Всего 2 ответа


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

введите описание изображения здесь

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


Действительно, объединение 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>

Есть идеи?

10000