JavaRush /Курсы /Курс "Программирование под Андроид" /Разбираем макет-ограничитель

Разбираем макет-ограничитель

Курс "Программирование под Андроид"
3 уровень , 8 лекция
Открыта

Прежде чем перейти к следующему уроку, мы хотим обратить Ваше внимание на новый вид макета в Android Studio — макет-ограничитель или ConstraintLayout. Вам придется немного изменить свой код, в следующих уроках мы покажем, как именно.

Держим нос по ветру

Google постоянно совершенствует платформу Андроид и добавляет новые возможности. Они облегчают жизнь разработчиков, но усложняют процесс обучения. Недавно Google разработал ConstraintLayout, этот инструмент позволяет быстро создавать отзывчивый интерфейс с большим количеством компонентов. Такой козырь неплохо держать в рукаве, но в нашем курсе мы предпочли более традиционные макеты — относительный и линейный.

Мы упомянули об этом, потому что новые шаблоны проектов в Android Studio используют макет-ограничитель по умолчанию, из-за чего код у Вас на экране может отличаться от нашего.

Файл макета по умолчанию

В последних версиях Android Studio при выборе шаблона Empty Activity файл макета app/src/main/res/layout/activity_main.xml выглядит так:

<?xml version="1.0" encoding="utf-8"?>
&ltandroid.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:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.udacity.myapplication.MainActivity">

    &ltTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintLeft_toLeftOf="@+id/activity_main"
        app:layout_constraintTop_toTopOf="@+id/activity_main"
        app:layout_constraintRight_toRightOf="@+id/activity_main"
        app:layout_constraintBottom_toBottomOf="@+id/activity_main" />

 </android.support.constraint.ConstraintLayout>

Как видите, тут использован ConstraintLayout, в котором положение TextView зафиксировано ограничителями.

Меняем файл макета

В отличие от приведенного выше примера кода, в наших уроках код по умолчанию выглядит так, как в следующем примере — с корневым элементом RelativeLayout.

<??xml version="1.0" encoding="utf-8"?>
<?RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.udacity.myapplication.MainActivity">

    <?TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
<?/RelativeLayout>

При создании нового проекта, откройте файл app/src/main/res/layout/activity_main.xml и вставьте в него этот код. Теперь можно работать!

Если хотите основательно изучить новые возможности макета ConstraintLayout, почитайте документацию на сайте.

Комментарии (30)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
26 ноября 2024
Последний коммент не работает
Василь Уровень 4
14 мая 2024
при виборі шаблону Empty Activity файл макета app/src/main/res/layout/activity_main.xml не буде створено. Тому вибирайте "Basic Views Activity". А потім вже конвертуйте файл за інструкцією: Перехід з ConstraintLayout на RelativeLayout в Android Studio: Покрокові інструкції 1. Використання меню "Convert View": Цей метод є найпростішим і найшвидшим, якщо у вас є простий макет ConstraintLayout. Відкрийте файл макета, який містить ConstraintLayout, який ви хочете конвертувати. Виберіть ConstraintLayout в дереві компонентів. Клікніть правою кнопкою миші на ConstraintLayout і виберіть "Convert View". З меню, що з'явиться, виберіть "RelativeLayout". Android Studio автоматично конвертує ваш ConstraintLayout в RelativeLayout, намагаючись зберегти розташування та поведінку ваших елементів. Може допоможе ця відеоінструкція Якщо щось не зрозуміло, пишіть в приватні, постараюся допомогти. Сам з годину сидів розбирався.
3 декабря 2021
Код устарел. Для того, чтобы перейти с ConstraintLayout на RelativeLayout: 1. Откройте вкладку "Design" 2. Нажмите правой кнопкой мыши на "ConstraintLayout" (в окне "Component Tree") 3. Нажмите на пункт "Convert view" 4. Выберите в появившемся окне "RelativeLayout" 5. Нажмите "Apply" Готово. Программа сделает всё сама...
alex Уровень 24
21 февраля 2023
👍
Vlada Уровень 35
15 марта 2023
Спасибо огромное!
radar Уровень 13
19 ноября 2023
не могу выполнить 4й пункт там нет RelativeLayout если в поле для набора ввести его, то он появляется но когда нажимаешь апплайку, то ничего не происходит пересоздал проект заново не вставляя указанный код, выполнил ваши пункты. на этот раз ПОЛУЧИЛОСЬ! вставил код - не пошло отредактировал отступы - не пошло весь код - зелёный первая строка подчёркнута красной волнистой чертой попытался запустить - выдал следующее: Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing com.android.build.gradle.internal.res.ParseLibraryResourcesTask$ParseResourcesRunnable
🦔 Виктор Уровень 20 Expert
25 ноября 2020
Эх, как быстро летит время... Код в лекции давным-давно нерабочий, благо, уже в самой студии появилась конвертация макета на нужный нам формат.
MR Уровень 22
22 сентября 2020
не написала об этом в предыдущих лекциях, вот шарахнуло меня написать сейчас и сюда. Никто не знает, почему у меня папка AppData отсутствует на ноуте и почему папка LENOVO имеет замок, говорящий. что доступ к ней никто не имеет, хотя я захожу. всё там есть кроме AppData? в общем, я немного озадачена.
Radio_Bashka Уровень 1
17 сентября 2023
поздравляю у вас ломаная винда))
Andrey Romanenkov Уровень 1
25 апреля 2020
Возможно, потребуется добавить в ресурс <dimen> в res/values.Помощь
Maks Уровень 23
19 сентября 2020
огрОмное вАм спа-си-Бо !! .
Антон Уровень 1
19 июля 2018
Вообще не понятно к чему всё это
Sonofsun Уровень 4
12 мая 2018
Эту лекцию нужно ставить после 10й - Она очень путает! До того момента как вы не создадите какой бы то ни было проект - файл макета и вся ветка дерикторий у вас не появится! Смотрите следующие 2 лекции и затем возвращайтесь сюда - так будет намного яснее
WantToSleep Уровень 25
23 августа 2019
ПЛЮСАНИТЕ этому пацану,чтобы лекцию подвинули
Karnegin Уровень 7
27 апреля 2018
А не проще произвести конвертацию лайаута в Андроид Студии, вместо копи/пасте текста?
Муслим Уровень 2
27 января 2019
как это сделать?
Владимир Уровень 20
11 декабря 2017
Не верный код, актуализируйте под последнюю версию Android Studio. У меня получился следующий код: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="16dp" android:paddingLeft="16dp" android:paddingRight="16dp" android:paddingTop="16dp" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> </RelativeLayout> + пришлось создать вручную класс MainActivity
Илья Уровень 17
21 января 2018
Спасибо! Под студию 3.0.1 подходит код. А вот MainActivity автоматически создался.
Andrey Romanenkov Уровень 1
25 апреля 2020
Спасибо
Fatum Уровень 1
10 декабря 2020
в 2020 всё ещё актуальный код, спасибо!