Как использовать layout_aspectRatio в PercentRelativeLayout?

Я пытаюсь получить соотношение сторон 16: 9 на представлении с PercentRelativeLayout.

Итак, я поместил эту строку в файл build.gradle: compile 'com.android.support:design:23.0.1'

Я использую этот макет:

<android.support.percent.PercentRelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:layout_width="match_parent"
        app:layout_aspectRatio="178%"
        android:scaleType="centerCrop"/>

</android.support.percent.PercentRelativeLayout>

Проблемы:

  • Android Studio предупреждает меня: 'layout_height' should be defined для ImageView.
  • Когда я запускаю свой проект, я получил: Error:(15) No resource identifier found for attribute 'layout_aspectRatio'.

Итак, что не так?

Ответ 1

Теперь, когда оба PercentFrameLayout и PercentRelativeLayout устарели в 26.0.0, вы можете начать использовать ConstraintLayout.

В этой статье в блоге объясняется, как добиться соотношения сторон 16: 9 для ImageView с помощью ConstraintLayout, но оно может применяться к любому виду.

Ответ 2

Похоже, вы используете неправильную зависимость, пытаясь включить процентную библиотеку поддержки.

Правильная (и последняя версия):

com.android.support:percent:23.1.0

Другими словами, заявленная зависимость должна выглядеть так в вашем файле gradle:

compile 'com.android.support:percent:23.1.0'

Ответ 3

При правильной зависимости у вас все еще есть предупреждение

'layout_height' должен быть определен

Я использовал android: layout_height = "0dp" или android: layout_width = "0dp", чтобы избежать этого.

           <View
            android:layout_height="0dp"
            android:layout_width="0dp"
            app:layout_aspectRatio="75%"
            app:layout_widthPercent="100%"
             />

вы даже можете использовать android: layout_height = "wrap_content" в случае, если контент будет больше, чем layout_aspectRatio

Ответ 4

Здесь есть сообщение g +: https://plus.google.com/+AndroidDevelopers/posts/ZQS29a5yroK, в котором объясняется, как использовать это в некоторой степени.

В комментариях также обсуждается предупреждение layout_width/height. Фильтр Lint будет добавлен в будущую версию Android Studio, но до этого вы можете добавить <!-- suppress AndroidDomInspection --> для подавления предупреждения или просто игнорировать его.