Соотношение сторон ConstraintLayout

Рассмотрим следующий файл макета:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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="match_parent"> <android.support.constraint.ConstraintLayout android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FF0000" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin"> <ImageView android:layout_width="0dp" android:layout_height="0dp" android:background="#0000FF" android:padding="16dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintDimensionRatio="H,3:1" tools:layout_editor_absoluteX="16dp" /> </android.support.constraint.ConstraintLayout> </RelativeLayout> 

Я не уверен, как работает приложение: layout_constraintDimensionRatio. Мое понимание – это отношение всегда будет шириной: высота. Таким образом, 3: 1 всегда будет показывать изображение в 3 раза шире высоты. Префикс H или W указывает ConstraintLayout, какое измерение должно учитывать отношение. Если это H, то это означает, что ширина будет сначала вычисляться из других ограничений, а затем высота будет скорректирована в соответствии с соотношением сторон. Однако это результат макета:

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

Высота в 3 раза больше ширины, что является неожиданным. Может ли кто-нибудь объяснить мне, как размеры вычисляются относительно приложения: layout_constraintDimensionRatio?

Взгляните на эти свойства ImageView :

  app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintLeft_toLeftOf="parent" 

Эти свойства переопределяют layout_constraintDimensionRatio из-за которых ImageView ограничен снизу, сверху и слева от основного родителя, в результате чего View занимает левую, верхнюю и нижнюю части основного экрана.

  app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" 

Это было бы одним из решений. Вы можете опустить layout_constraintBottom_toBottomOf если хотите, чтобы представление отображалось сверху или наоборот. Вероятно, было бы лучше всего удалить все вышеперечисленные ограничения, за исключением layout_constraintDimensionRatio , который был бы самым рекомендуемым решением.

Intereting Posts
Когда я разрабатываю приложение для Android, как я могу отменить запущенную AsyncTask? Повернуть элемент ImageView из макета xml-файла AES Encryption Android <-> iOS разные результаты по длине сообщения> 15 байт Активность Android как диалог Отображать ProgressBar, пока изображение загружается в ImageView? Лучший способ убедиться, что игры Android работают с одинаковой скоростью на любом устройстве Самый простой способ отображения строк со значками в RecyclerView Получить текущий видимый текст в текстовом режиме Android: просмотр списка идентификаторов Как остановить звонок телефона при воспроизведении (произношении) имени вызывающего абонента, а затем снова звонить по телефону Есть ли способ уменьшить расстояние между значками элементов действия на панели действий? Отправка паузы в дозвонщик Ошибка UNIQUE: база данных sqlite: android Проблема с картой Google, даже если все настройки верны в соответствии с документом google Media player prepareAsync () незаконное государство исключение Android