Если вы используете Constraint Layout 1.1.0 (последняя стабильная на момент написания) ... лучший способ - это просто использовать проценты!
<?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:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/black"
android:text="Test"
android:textColor="@android:color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_default="percent"
app:layout_constraintHeight_percent="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
Это дает:
![This](https://i.stack.imgur.com/JRtzI.png)
ОБНОВЛЕНИЕ :
- Почему вы устанавливаете layout_width в 0dp и используете начало / конец вместо layout: width = "match_parent”?
Хороший вопрос. ConstraintLayout не поддерживает match_parent
(решение, которое сейчас, спустя год, я думаю, было в порядке, поскольку оно заставляет пользователей задавать этот вопрос, когда они исправляются, но я думаю, что это должно было быть предупреждение, и компоновка должна была сделать то, что ожидалось - прикрепить каждую сторону к родителю и использовать 0dp за кулисами). На практике это не всегда происходит, и это более запутанно, чемтехническая правильность использования 0dp (что за кадром соответствует MATCH_CONSTRAINT, а не MATCH_PARENT). Я предлагаю вам взглянуть на официальную документацию по макету ограничений , чтобы узнать об этом.
Для«ПричинойЧитатель «Я спешу», я использовал 0dp, потому что `match_parent_ не работает с ConstraintLayout, как вы думаете (это может выглядеть нормально , но это не работает).0dp означает соответствие ограничениям, ваш размер будет в конечном итоге определяться этим.
Зачем начинать / заканчивать?Потому что вы не должны использовать лево / право, если вы нацелены на API 16+ и если вы нацеливаетесь на API 16 <, тогда вы должны использовать ОБА, потому что слева направо это нормально, но арабский, иврит и многие языки справа налево,не будет работать правильно, если вы не используете начало / конец.(Слева направо, справа налево!).Поверьте мне, используйте начало / конец всегда, для всего. </p>
Как проверить, какую версию библиотеки ограничений я использую?
Ваши библиотеки импортируются через Gradle, поэтому откройте build.gradle
и найдите раздел dependencies
.Он будет содержать строку, подобную этой:
implementation "com.android.support.constraint:constraint-layout:1.1.0”
(например).Никаких загадок.