undefined

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

Курс "Программирование под Андроид"
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"?>
<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:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.udacity.myapplication.MainActivity">

    <TextView
        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, почитайте документацию на сайте.

Комментарии (23)
Чтобы просмотреть все комментарии или оставить свой,
перейдите в полную версию
🦔 Виктор 20 уровень, Москва Expert
25 ноября 2020
Эх, как быстро летит время... Код в лекции давным-давно нерабочий, благо, уже в самой студии появилась конвертация макета на нужный нам формат.
MR 22 уровень, Харьков
22 сентября 2020
не написала об этом в предыдущих лекциях, вот шарахнуло меня написать сейчас и сюда. Никто не знает, почему у меня папка AppData отсутствует на ноуте и почему папка LENOVO имеет замок, говорящий. что доступ к ней никто не имеет, хотя я захожу. всё там есть кроме AppData? в общем, я немного озадачена.
Andrey Romanenkov 1 уровень
25 апреля 2020
Возможно, потребуется добавить в ресурс <dimen> в res/values.Помощь
Антон 0 уровень, Минск
19 июля 2018
Вообще не понятно к чему всё это
Sonofsun 4 уровень, Санкт-Петербург
12 мая 2018
Эту лекцию нужно ставить после 10й - Она очень путает! До того момента как вы не создадите какой бы то ни было проект - файл макета и вся ветка дерикторий у вас не появится! Смотрите следующие 2 лекции и затем возвращайтесь сюда - так будет намного яснее
Karnegin 7 уровень, Екатеринбург
27 апреля 2018
А не проще произвести конвертацию лайаута в Андроид Студии, вместо копи/пасте текста?
Владимир 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
27 октября 2017
В примере приведен не рабочий код
roman vanzha 25 уровень, Москва
3 сентября 2017
<?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>
Андрій 17 уровень, Киев
1 августа 2017
почему в начале тегов стоят знаки вопросов?