Студия Android продолжает заменять match_parent с фиксированным значением dp

Студия Android (v 2.3.1) продолжает заменять match_parent RelativeLayout с фиксированным dp vanue. Например, когда я набираю 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>

Ответы

Ответ 1

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

Сделайте это, как показано на рисунке

Ответ 2

Короче:

Вы не можете использовать 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"

Редактор, используя "infer constraints", как в ответе Sirnivas, использует подход 0dp.

ПРИМЕЧАНИЕ: "match_constraint", похоже, не является значением, которое можно использовать. 0dp - это то, что кажется фактическим значением для измерения в соответствии с ограничениями.

Ответ 3

<?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>