Студия Android продолжает заменять match_parent на фиксированное значение dp
Студия Android (v 2.3.1) продолжает заменять match_parent
RelativeLayout с фиксированным значением dp. Например, когда я набираю match_parent в качестве ширины, он заменяет его на 368dp. Когда я тестирую приложение, я вижу, что RelativeLayout действительно неверен.
Кто-нибудь знает, как это исправить?
<?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"
tools:context="be.mawey.lamachat.LoginActivity">
<RelativeLayout
android:layout_width="match_parent" <!-- THIS IS BEING REPLACED WITH 368dp -->
android:layout_height="match_parent" <!-- THIS IS BEING REPLACED WITH 495dp -->
tools:layout_editor_absoluteX="8dp"
tools:layout_editor_absoluteY="8dp">
<Button
android:id="@+id/buttonLogin"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:background="@color/colorPrimary"
android:text="Login"
android:textColor="@android:color/white"
android:textSize="18sp"
tools:layout_editor_absoluteX="8dp"
tools:layout_editor_absoluteY="292dp" />
<EditText
android:id="@+id/editTextCode"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_above="@+id/buttonLogin"
android:layout_alignParentStart="true"
android:ems="10"
android:hint="Secret code here"
android:inputType="numberPassword"
tools:layout_editor_absoluteX="8dp"
tools:layout_editor_absoluteY="234dp" />
<TextView
android:id="@+id/textView3"
android:layout_width="match_parent"
android:layout_height="50dp"
android:fontFamily="monospace"
android:text="example"
android:textAlignment="center"
android:textColor="@color/colorPrimaryDark"
android:textSize="36sp"
android:textStyle="italic"
tools:layout_editor_absoluteX="8dp"
tools:layout_editor_absoluteY="16dp" />
</RelativeLayout>
</android.support.constraint.ConstraintLayout>
3 ответа
Короче:
Вы не можете использовать match_parent
как измерение для детей ConstraintLayout
, Вы должны использовать 0dp
что означает "match_constraint" и ограничивает стороны к сторонам родителя:
android:layout_width="0dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
или же
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
С небольшим количеством фона (или - откуда я полагаю, что замешательство связано):
Хотя мне кажется, что я не могу найти доказательства, и мой коллега утверждает, что я не прав - я уверен, что документация для Android для constraintLayout использовалась, чтобы указывать нам, разработчикам, использовать "0dp или match_parent" в качестве значений для layout_width
или же layout_height
чтобы указать, что размер соответствующего вида должен быть определен constraintLayout
использование указанных ограничений (а не использование заданного фиксированного значения или определение размера его содержимого). Я также уверен, что использовал это значение (match_parent
) таким образом и он работал до перехода на AndroidStudio 2.3.1.
Будь я прав или бред, факт в том, что в настоящее время в документации говорится:
Важное замечание: MATCH_PARENT не поддерживается для виджетов, содержащихся в ConstraintLayout, хотя подобное поведение можно определить с помощью MATCH_CONSTRAINT с соответствующими левыми / правыми или верхними / нижними ограничениями, установленными на "родительский".
Кроме того, 0dp
значение считается таким же, как я помню, раньше:
Размерность виджетов можно указать, задав атрибуты android:layout_width и android:layout_height тремя различными способами:
(...)
- Использование 0dp, что эквивалентно "MATCH_CONSTRAINT"
Редактор, использующий "логические ограничения", как в ответе Сирниваса, на самом деле использует 0dp
подход.
ПРИМЕЧАНИЕ. "Match_constraint" не является значением, которое можно использовать. 0dp
это то, что кажется фактическим значением для измерения, чтобы соответствовать ограничениям.
<?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">
<Button
android:id="@+id/buttonLogin"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:background="@color/colorPrimary"
android:text="Login"
android:textColor="@android:color/white"
android:textSize="18sp"
tools:layout_constraintRight_creator="1"
tools:layout_constraintBottom_creator="1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="@+id/editTextCode"
tools:layout_constraintLeft_creator="1"
android:layout_marginBottom="169dp"
app:layout_constraintLeft_toLeftOf="@+id/editTextCode" />
<EditText
android:id="@+id/editTextCode"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_above="@+id/buttonLogin"
android:layout_alignParentStart="true"
android:ems="10"
android:hint="Secret code here"
android:inputType="numberPassword"
tools:layout_constraintRight_creator="1"
tools:layout_constraintBottom_creator="1"
app:layout_constraintBottom_toTopOf="@+id/buttonLogin"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
app:layout_constraintRight_toRightOf="parent"
tools:layout_constraintLeft_creator="1"
android:layout_marginBottom="8dp"
app:layout_constraintLeft_toLeftOf="parent" />
<TextView
android:id="@+id/textView3"
android:layout_width="0dp"
android:layout_height="50dp"
android:fontFamily="monospace"
android:text="example"
android:textAlignment="center"
android:textColor="@color/colorPrimaryDark"
android:textSize="36sp"
android:textStyle="italic"
tools:layout_constraintTop_creator="1"
tools:layout_constraintRight_creator="1"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="16dp"
tools:layout_constraintLeft_creator="1"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>