Этот вид не ограничен по вертикали. Во время выполнения он переместится влево, если вы не добавите вертикальное ограничение

102

введите описание изображения здесьНовый редактор макетов в Android Studio 2.2 продолжает показывать эту ошибку в таких представлениях, как EditText и Buttons. любезно помогите. Также будут признательны за любые ссылки, которые помогут в адаптации с новым макетом ограничений.

код:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    android:id="@+id/activity_main"
    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="com.set.email.MainActivity"
    tools:layout_editor_absoluteX="0dp"
    tools:layout_editor_absoluteY="81dp">

    <TextView
        android:text="To:"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:layout_editor_absoluteX="7dp"
        tools:layout_editor_absoluteY="4dp"
        android:id="@+id/textTo"/>

    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress"
        android:ems="10"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="24dp"
        android:id="@+id/editTo"
        android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"/>

    <EditText
        android:layout_width="384dp"
        android:layout_height="42dp"
        android:inputType="textPersonName"
        android:ems="10"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="94dp"
        android:id="@+id/editSubject"
        android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"/>

    <EditText
        android:layout_width="384dp"
        android:layout_height="273dp"
        android:inputType="textPersonName"
        android:ems="10"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="179dp"
        android:id="@+id/editMessage"
        app:layout_constraintLeft_toLeftOf="@+id/activity_main"
        tools:layout_constraintLeft_creator="50"
        android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"/>

    <Button
        android:text="Send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:layout_editor_absoluteX="140dp"
        tools:layout_editor_absoluteY="454dp"
        android:id="@+id/btnSend"
        app:layout_constraintLeft_toLeftOf="@+id/editMessage"
        tools:layout_constraintLeft_creator="0"
        app:layout_constraintRight_toRightOf="@+id/activity_main"
        android:layout_marginEnd="16dp"
        tools:layout_constraintRight_creator="0"
        android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"/>


</android.support.constraint.ConstraintLayout>
onexf
источник
Какая ошибка? Опишите вашу актуальную проблему. Этого недостаточно.
Lexi
вы можете поделиться своим xml-кодом ??
Janki Gadhiya
Когда закончите разметку компоновки ограничений, нажмите кнопку, чтобы автоматически добавить все отсутствующие ограничения.
Alex Cohn
1
кнопка? Вы имеете в виду красную лампочку для ворса? он не показывает никаких вариантов для автоматического добавления отсутствующих ограничений.
onexf

Ответы:

82

Макет с ограничениями направлен на сокращение иерархии макетов и повышение производительности макетов (технически вам не нужно вносить изменения для разных размеров экрана, без перекрытия, работает как шарм на мобильном телефоне, а также вкладка с теми же ограничениями). Вот как вы избавитесь от указанной выше ошибки при использовании нового редактора макета.

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

Нажмите на маленький кружок и перетащите его влево, пока кружок не станет зеленым, чтобы добавить левое ограничение (укажите число, скажем x dp. Повторите его с другими сторонами и оставьте нижнее ограничение пустым, если у вас есть другой вид под ним. . введите описание изображения здесь

Изменить: согласно сайту разработчиков, вместо добавления ограничений к каждому представлению по мере их размещения в макете вы можете переместить каждое представление в нужные позиции, а затем щелкнуть Infer Constraints, чтобы автоматически создавать ограничения. подробнее здесь

onexf
источник
Я только что добавил изображение в макет ограничения, но оно не отображается, когда я запускаю приложение. не могли бы вы мне помочь ?
PriyankaChauhan
79

Начиная с Android Studio v3, Infer Constraint был удален из раскрывающегося списка.

Используйте значок волшебной палочки в меню панели инструментов над предварительным просмотром дизайна; есть кнопка " Infer Constraints ". Нажмите эту кнопку, это автоматически добавит несколько строк в текстовое поле, а красная линия будет удалена.

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

Gvtha
источник
1
В моем случае это только добавляет ограничение игнорирования, но не решает проблему
mrroot5
это решение проще, чем верхнее. Но работает только для AS v3 и новее.
Йоханес А.И.,
44

Просто скопируйте этот код во все компоненты, которые вы будете перетаскивать.

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

пример:

<TextView
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    android:text="To:"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:layout_editor_absoluteX="7dp"
    tools:layout_editor_absoluteY="4dp"
    android:id="@+id/textTo"/>
Ainz Черногория
источник
6
Но почему? Вы можете объяснить его подробности?
Prathamesh More
22

Перейдите в Дизайн, щелкните правой кнопкой мыши свой виджет, Макет ограничения >> Вывести ограничения. Вы можете заметить, что некоторый код был автоматически добавлен в ваш текст.

Атул Чаван
источник
Да, при выводе ограничений используются значения по умолчанию, указанные в файле activity.xml
Рохан Гала,
5
Follow these steps:
Right click on designing part > Constraint Layout > Infer Constraints
Маквин
источник
4

Если Inferring по- Constraintsпрежнему дает вам ошибку, просто используйте этот код:

app:layout_constraintBottom_toBottomOf="parent"
user8622246
источник
2

Вам нужно перетащить за EditTextкрай макета, а не только за другой виджет. Вы также можете добавить ограничения, просто перетащив точку ограничения, окружающую виджет, к краю экрана, чтобы добавить ограничения, как указано.

Измененный код будет выглядеть примерно так:

    app:layout_constraintLeft_toLeftOf="@+id/router_text"
    app:layout_constraintTop_toTopOf="@+id/activity_main"
    android:layout_marginTop="320dp"
    app:layout_constraintBottom_toBottomOf="@+id/activity_main"
    android:layout_marginBottom="16dp"
    app:layout_constraintVertical_bias="0.29" 
Абдул Рахман К.
источник
1

Перейдите к тексту макета XML, где виджет (кнопка или другое представление) указывает на ошибку, наведите курсор на него, нажмите alt+ enterи выберите отсутствующие атрибуты ограничений.

КлавиатураМальчик
источник
Он также дает предупреждающее сообщение о том, что жестко запрограммированная строка «TextView» должна использовать ресурс @string
Мохаммад Хейдари
1

например у меня есть это

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

используйте макет RelativeLayout, как это

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
ибрахим мерт
источник
1

Просто переключитесь в представление «Дизайн» и найдите соответствующий виджет. Возьмите одну из точек на границе виджета и присоедините ее к соответствующему краю экрана (или к точке на каком-либо другом виджете).

Например, если виджет является панелью инструментов, просто возьмите самую верхнюю точку и присоедините ее к самому верхнему краю экрана телефона, как показано на изображении.

Просмотр дизайна

Сунит Гаутам
источник
1
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"

Это мне очень помогает

Ваня Рейчел
источник
-3

Вам нужно изменить androidx.constraintlayout.widget.ConstraintLayoutна RelativeLayout.

Юнесс Лабхох
источник