С помощью Preview 1 Android Studio 2.2 Google выпустила новый макет в своей библиотеке поддержки: ConstraintLayout
. С ConstraintLayout проще использовать инструмент "Дизайн" в Android Studio, но я не нашел способа использовать относительные размеры (проценты или "веса", как в LinearLayout). Есть ли способ определить ограничения на основе процентов? Например, сделать вид занимающим 40% экрана, создать 20% поля между видами, установить ширину вида на 50% от другой ширины вида?
Как заставить ConstraintLayout работать с процентными значениями?
Ответ 1
В настоящее время вы можете сделать это несколькими способами.
Одним из них является создание направляющих (щелкните правой кнопкой мыши область дизайна, затем нажмите "Добавить вертикальную/горизонтальную направляющую"). Затем вы можете щелкнуть "заголовок" директивы, чтобы изменить позиционирование на процентное соотношение. Наконец, вы можете ограничить взгляды руководящими принципами.
Другой способ - это позиционировать вид с использованием смещения (в процентах), а затем привязать другие виды к этому виду.
Тем не менее, мы думали о том, как предложить процентные измерения. Я не могу дать никакого обещания, но мы хотели бы добавить это.
Ответ 2
Здесь может быть полезно получить краткую справку.
Используйте: руководство с app:layout_constraintGuide_percent
, например:
<android.support.constraint.Guideline
android:id="@+id/guideline"
android:layout_width="1dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5"/>
И затем вы можете использовать это руководство в качестве опорных точек для других видов.
Примечание. Используйте androidx.constraintlayout.widget.Guideline
при использовании артефактов AndroidX.
Ответ 3
Начиная с "ConstraintLayout1.1.0-beta1" вы можете использовать проценты для определения ширины и высоты.
android:layout_width="0dp"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent=".4"
Это определит ширину, равную 40% ширины экрана. Комбинация этого и руководящих указаний в процентах позволяет вам создавать любой процентный макет, который вы хотите.
Ответ 4
С новым выпуском ConstraintLayout v1.1 вы можете сделать следующее:
<Button
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintHeight_percent="0.2"
app:layout_constraintWidth_percent="0.65" />
Это ограничит кнопку на 20% высоты и 65% ширины родительского вида.
Ответ 5
Как использовать рекомендации
Принятый ответ немного неясен о том, как использовать рекомендации и что такое "заголовок".
Шаги
Сначала добавьте руководство.
Выберите Guid Guid или немного переместите его, чтобы сделать видимыми ограничения.
Затем щелкните круглый круг ( "заголовок" ), пока он не станет процентом. Затем вы можете перетащить этот процент вниз на 50% или что угодно.
После этого вы можете ограничить свое представление директивой, чтобы сделать ее частью процента от родителя (используя match_constraint
в представлении).
Ответ 6
Принцип неоценим - и приложение: layout_constraintGuide_percent - отличный друг... Однако иногда мы хотим, чтобы проценты без рекомендаций. Теперь можно использовать весы:
android:layout_width="0dp"
app:layout_constraintHorizontal_weight="1"
Вот более полный пример, который использует руководство с дополнительными весами:
<?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="match_parent"
android:padding="16dp"
tools:context="android.itomerbu.layoutdemo.MainActivity">
<android.support.constraint.Guideline
android:id="@+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.44"/>
<Button
android:id="@+id/btnThird"
android:layout_width="0dp"
app:layout_constraintHorizontal_weight="1"
android:layout_height="wrap_content"
android:text="@string/btnThird"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginBottom="8dp"
app:layout_constraintRight_toLeftOf="@+id/btnTwoThirds"
app:layout_constraintBottom_toTopOf="@+id/guideline"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"/>
<Button
android:id="@+id/btnTwoThirds"
app:layout_constraintHorizontal_weight="2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/btnTwoThirds"
app:layout_constraintBottom_toBottomOf="@+id/btnThird"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toRightOf="@+id/btnThird"/>
</android.support.constraint.ConstraintLayout>
Ответ 7
С ConstraintLayout v1.1.2 измерение должно быть установлено в 0dp
а затем установить layout_constraintWidth_percent
или layout_constraintHeight_percent
в значение от 0 до 1, например:
<!-- 50% width centered Button -->
<Button
android:id="@+id/button"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintWidth_percent=".5" />
(Вам не нужно устанавливать app:layout_constraintWidth_default="percent"
или app:layout_constraintHeight_default="percent"
с ConstraintLayout 1.1.2 и последующими версиями)
Ответ 8
Попробуйте этот код. Вы можете изменить проценты высоты и ширины с помощью app: layout_constraintHeight_percent и app: layout_constraintWidth_percent.
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#FF00FF"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHeight_percent=".6"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent=".4"></LinearLayout>
</android.support.constraint.ConstraintLayout>
Gradle:
dependencies {
...
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
}
Ответ 9
вы можете использовать app:layout_constraintVertical_weight
так же, как layout_weight
в linearlayout
<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="match_parent">
<Button
android:id="@+id/button4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/button5"
app:layout_constraintVertical_weight="1"/>
<Button
android:id="@+id/button5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintLeft_toRightOf="@+id/button4"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintVertical_weight="1"/>
</android.support.constraint.ConstraintLayout>
ПРИМЕЧАНИЕ: app:layout_constraintVertical_weight
(app:layout_constraintHorizontal_weight
) будет работать с android:layout_width="0dp"
(android:layout_height="0dp"
Ответ 10
Для кого-то, кто может оказаться полезным, вы можете использовать layout_constraintDimensionRatio
im любого дочернего представления внутри ConstraintLayout
, и мы можем определить высоту или ширину как отношение другого измерения (по крайней мере, одно должно быть 0dp ширины или высоты) пример
<ImageView
android:layout_width="wrap_content"
android:layout_height="0dp"
android:src="@drawable/top_image"
app:layout_constraintDimensionRatio="16:9"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
в этом случае соотношение сторон 16: 9 app:layout_constraintDimensionRatio="16:9"
вы можете найти больше информации ЗДЕСЬ
Ответ 11
Просто замените в своем теге
app:layout_constraintGuide_begin="291dp"
с
app:layout_constraintGuide_percent="0.7"
где 0,7 означает 70%.
Также, если вы сейчас попытаетесь перетащить направляющие, значение перетаскивания будет отображаться в% age.
Ответ 12
Я знаю, что это не то, о чем изначально первоначально просил OP, но это очень помогло мне в этой ситуации, когда у меня возникла похожая проблема. Добавление этого для людей, желающих изменить размер окна макета (который я использую регулярно), с помощью кода, Добавьте это к вашему onCreate в активности вопроса. (Изменяет до 80%)
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels;
getWindow().setLayout((int)(width * 0.8), (int)(height * 0.8));