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

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

Открыта

Прежде чем перейти к следующему уроку, мы хотим обратить Ваше внимание на новый вид макета в 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, 04:26
Последний коммент не работает
Васильtrainee в Kindgeek
14 мая 2024, 12:24
при виборі шаблону 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, 18:13
Код устарел. Для того, чтобы перейти с ConstraintLayout на RelativeLayout: 1. Откройте вкладку "Design" 2. Нажмите правой кнопкой мыши на "ConstraintLayout" (в окне "Component Tree") 3. Нажмите на пункт "Convert view" 4. Выберите в появившемся окне "RelativeLayout" 5. Нажмите "Apply" Готово. Программа сделает всё сама...
alex
Уровень 24
21 февраля 2023, 17:50
👍
Vlada
Уровень 35
15 марта 2023, 09:29
Спасибо огромное!
radar
Уровень 13
19 ноября 2023, 15:55
не могу выполнить 4й пункт там нет RelativeLayout если в поле для набора ввести его, то он появляется но когда нажимаешь апплайку, то ничего не происходит пересоздал проект заново не вставляя указанный код, выполнил ваши пункты. на этот раз ПОЛУЧИЛОСЬ! вставил код - не пошло отредактировал отступы - не пошло весь код - зелёный первая строка подчёркнута красной волнистой чертой попытался запустить - выдал следующее: Caused by: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing com.android.build.gradle.internal.res.ParseLibraryResourcesTask$ParseResourcesRunnable
🦔 Викторведу учебный тг-канал в t.me/JavangelionExpert
25 ноября 2020, 04:08
Эх, как быстро летит время... Код в лекции давным-давно нерабочий, благо, уже в самой студии появилась конвертация макета на нужный нам формат.
MR
Уровень 22
22 сентября 2020, 18:17
не написала об этом в предыдущих лекциях, вот шарахнуло меня написать сейчас и сюда. Никто не знает, почему у меня папка AppData отсутствует на ноуте и почему папка LENOVO имеет замок, говорящий. что доступ к ней никто не имеет, хотя я захожу. всё там есть кроме AppData? в общем, я немного озадачена.
Radio_Bashka
Уровень 1
17 сентября 2023, 18:56
поздравляю у вас ломаная винда))
Andrey Romanenkov
Уровень 1
25 апреля 2020, 17:11
Возможно, потребуется добавить в ресурс <dimen> в res/values.Помощь
Maks
Уровень 23
19 сентября 2020, 22:18
огрОмное вАм спа-си-Бо !! .
Антон
Уровень 2
19 июля 2018, 11:02
Вообще не понятно к чему всё это
Sonofsun
Уровень 4
12 мая 2018, 12:29
Эту лекцию нужно ставить после 10й - Она очень путает! До того момента как вы не создадите какой бы то ни было проект - файл макета и вся ветка дерикторий у вас не появится! Смотрите следующие 2 лекции и затем возвращайтесь сюда - так будет намного яснее
WantToSleep
Уровень 25
23 августа 2019, 12:44
ПЛЮСАНИТЕ этому пацану,чтобы лекцию подвинули
Karnegin
Уровень 7
27 апреля 2018, 18:04
А не проще произвести конвертацию лайаута в Андроид Студии, вместо копи/пасте текста?
Муслим
Уровень 2
27 января 2019, 12:25
как это сделать?
Владимир
Уровень 20
11 декабря 2017, 20:18
Не верный код, актуализируйте под последнюю версию 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, 14:02
Спасибо! Под студию 3.0.1 подходит код. А вот MainActivity автоматически создался.
Andrey Romanenkov
Уровень 1
25 апреля 2020, 12:47
Спасибо
Fatum
Уровень 1
10 декабря 2020, 16:47
в 2020 всё ещё актуальный код, спасибо!