7. Layout параметры для View-элементов.

Лекция



Привет, Вы узнаете о том , что такое layout параметры для view-элементов , Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое layout параметры для view-элементов , настоятельно рекомендую прочитать все из категории Программирование мобильных устройств Android и IOs.

На этом уроке мы:

- разбираемся в характеристиках экрана
- рассматриваем layout параметры (высота, ширина, отступ, гравитация, вес)

Экраны

Для начала немного теории по экранам. Экран имеет такие физические характеристики как диагональ и разрешение. Диагональ – это расстояние между противоположными углами экрана, обычно измеряется в дюймах. Разрешение – кол-во точек по горизонтали и вертикали, которое экран способен отобразить, измеряется в пикселах.

Возьмем в качестве примера экран смартфона HTC Desire. Диагональ = 3,7 дюйма, разрешение = 800х480 пикселов.

7. Layout параметры для View-элементов.

Кол-во пикселов в одном дюйме называется dpi (dot per inch). Узнаем чему равно dpi в данном случае, вспомнив классику: c2 = a2 + b2, где с – кол-во пикселей по диагонали, т.е. вмещаемое в 3,7 дюйма. a и b – стороны экрана.

c = 3,7 * dpi
(3,7 * dpi)2 = 4802 + 8002
dpi2 = 870400 / 13,69 = 63579
dpi = 252. Т.е. в одном дюйме экрана помещается ряд из 252 пикселов.

 

Возвращаемся к теме урока. Рассмотрим подробно следующие параметры View элементов

7. Layout параметры для View-элементов.

 

Layout width и Layout height

Про ширину (layout_width) и высоту (layout_height) мы уже немного говорили на прошлом уроке. Мы можем указывать для них абсолютные значения, а можем использовать константы. Разберем подробнее эти возможности.

АБСОЛЮТНЫЕ ЗНАЧЕНИЯ:

Используются следующие единицы измерения (ЕИ):

dp или dip - Density-independent Pixels. Абстрактная ЕИ, позволяющая приложениям выглядеть одинаково на различных экранах и разрешениях.

sp - Scale-independent Pixels. То же, что и dp, только используется для размеров шрифта в View элементах

pt - 1/72 дюйма, определяется по физическому размеру экрана. Эта ЕИ из типографии.

px – пиксел, не рекомендуется использовать т.к. на разных экранах приложение будет выглядеть по-разному.

mm – миллиметр, определяется по физическому размеру экрана

in – дюйм, определяется по физическому размеру экрана

Подробней о различиях и соотношениях между этими ЕИ вы можете прочесть в этом материале сайта.

 

КОНСТАНТЫ

match_parent (fill_parent) – означает, что элемент займет всю доступную ему в родительском элементе ширину/высоту.

wrap_content – ширна/высота элемента будет определяться его содержимым

Создадим проект:

Project name: P0072_LayoutProp
Build Target: Android 2.3.3
Application name: LayoutProp
Package name: ru.startandroid.develop.layoutprop
Create Activity: MainActivity

Открываем main.xml. Настроим корневой LinearLayout на горизонтальную ориентацию, удалим TextView, и добавим Button с шириной и высотой равнойwrap_content. Она отображается на экране и ее ширина соответствует тексту на ней.

7. Layout параметры для View-элементов.

 

Изменим текст с «Button» на «Button with text», сохраним и посмотрим на экран.

7. Layout параметры для View-элементов.

 

Кнопка стала шире, т.к. ширина определяется по содержимому. Если же мы сейчас явно укажем ей ширину 250 dp, то кнопка растянется независимо от содержимого.

7. Layout параметры для View-элементов.

 

Теперь сделаем ширину равной match_parent. Кнопка растянулась на всю ширину родителя, т.е. LinearLayout. А LinearLayout в свою очередь занимет всю ширину экрана.

7. Layout параметры для View-элементов.

 

Если у нас родитель содержит несколько элементов и мы хотим, чтобы они заняли все пространство необходимо использовать параметр Layout weight – вес. Свободное пространство распределяется между элементами пропорционально их weight-значениям.

Изменим текст нашей кнопки на B1 и добавим ей соседа по LinearLayout – вторую кнопку с текстом B2. Об этом говорит сайт https://intellect.icu . Ширину для обоих поставьте wrap_content

7. Layout параметры для View-элементов.

 

Займемся дележом. Если мы хотим, чтобы кнопки поделили пространство родителя поровну – то для обеих укажем weight = 1. В этом случае кнопки равны по ширине.

7. Layout параметры для View-элементов.

 

Обратите внимание, что не используются единицы измерения, указываются просто числа.

Если нужно, чтобы B1 занимала четверть, а B2 три четверти свободного пространства, то проставляем weight = 1 для B1 и weight = 3 для B2.

7. Layout параметры для View-элементов.

 

Кол-во элементов может быть любым. Добавим еще кнопку с текстом B3weight = 2 и width = wrap_content.

7. Layout параметры для View-элементов.

 

xml-код получившегося экрана:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="horizontal"> 
<Button 
android:id="@+id/button1" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="B1" 
android:layout_weight="1"> 
</Button> 
<Button 
android:id="@+id/button2" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="B2" 
android:layout_weight="3"> 
</Button> 
<Button 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:id="@+id/button3" 
android:text="B3" 
android:layout_weight="2"> 
</Button> 
</LinearLayout>

 

Теперь для B2 и B3 укажите weight = 0. Они больше не претендуют на свободное пространство и занимают ширину по содержимому, а B1 забирает все себе.

7. Layout параметры для View-элементов.

 

Разумеется, все выше сказанное применимо и для параметра высоты - height.

При использовании weigth вы можете указать значение height или width = 0dp. В этом случае не будет учитываться содержимое элементов и результат будет более соответствующий коэффициентам веса.

 

Layout gravity

Параметр layout_gravity аналогичен выравниванию из Word или Excel. Удобнее всего продемонстрировать его с использованием FrameLayout. Я не описывал этот Layout на прошлом уроке, т.к. он совсем простой. Все помещаемые в него элементы он по умолчанию помещает в левый верхний угол и никак их не выстраивает. Нам это очень подходит для демонстрации настроек выравнивания.

Создадим grlayout.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<FrameLayout 
android:id="@+id/frameLayout1" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<Button 
android:id="@+id/button1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|left" 
android:text="gravity = top left"> 
</Button> 
<Button 
android:id="@+id/button2" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="top|right" 
android:text="gravity = top right"> 
</Button> 
<Button 
android:id="@+id/button3" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="bottom|left" 
android:text="gravity = bottom left"> 
</Button> 
<Button 
android:id="@+id/button4" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="bottom|right" 
android:text="gravity = bottom right"> 
</Button> 
<Button 
android:id="@+id/button5" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="center" 
android:text="gravity = center"> 
</Button> 
</FrameLayout> 
</LinearLayout>

 

На экране видим:

7. Layout параметры для View-элементов.

Для наглядности текст кнопки отображает ее свойства. Все очевидно и несложно.

Я честно пытался понять зачем нужны значения gravity fill_* и clip_*, но так и не понял. То, что написано про них в хелпе у меня не работает. Если у вас есть сведения по этому поводу – пишите в каменты.

Layout margin

Параметры margin полностью аналогичны margin из html. Это отступ. Он может быть со всех сторон сразу, либо только с необходимых сторон. Продемонстрируем это на примере TableLayout. Создадим marginlayout.xml и нарисуем таблицу три на три с кнопками.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<TableLayout 
android:layout_height="wrap_content" 
android:layout_width="match_parent" 
android:id="@+id/tableLayout1"> 
<TableRow 
android:id="@+id/tableRow1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
<Button 
android:text="Button" 
android:id="@+id/button1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
</Button> 
<Button 
android:text="Button" 
android:id="@+id/button2" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
</Button> 
<Button 
android:text="Button" 
android:id="@+id/button3" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
</Button> 
</TableRow> 
<TableRow 
android:id="@+id/tableRow2" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
<Button 
android:text="Button" 
android:id="@+id/button4" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
</Button> 
<Button 
android:text="Margin" 
android:id="@+id/button5" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
</Button> 
<Button 
android:text="Button" 
android:id="@+id/button6" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
</Button> 
</TableRow> 
<TableRow 
android:id="@+id/tableRow3" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
<Button 
android:text="Button" 
android:id="@+id/button7" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
</Button> 
<Button 
android:text="Button" 
android:id="@+id/button8" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
</Button> 
<Button 
android:text="Button" 
android:id="@+id/button9" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
</Button> 
</TableRow> 
</TableLayout> 
</LinearLayout>

 

7. Layout параметры для View-элементов.

 

И на кнопке в центре будем экспериментировать.

margin = 50 dp
Вокруг кнопки со всех сторон образовался отступ = 50 dp.

7. Layout параметры для View-элементов.

 


margin left = 10 dp 
margin top = 20 dp
Отступ слева и сверху.

7. Layout параметры для View-элементов.

 

 

margin right = 30 dp
margin bottom = 40 dp
Отступ справа и снизу.

7. Layout параметры для View-элементов.

 

Урок получился большой, но полезный. Думаю, это был последний урок дизайна, моделирования и верстки и дальше мы уже начнем кодить.

 

Стили

Если кто использовал HTML, то наверняка слышали про каскадные стили - CSS. Стили позволяют вам группировать атрибуты элементов (кнопок, таблиц, параграфов и т.д.). Далее вы просто применяете к элементам стили, и элемент рисуется с учетом всех атрибутов стиля. И нет необходимости повторять несколько раз один и тот же код для элементов, которые должны выглядеть одинаково. Особенно это удобно в случае изменения атрибутов. Вы просто меняете один раз стиль и все элементы с этим стилем меняются.

В Android тоже есть стили и они имеют точно такое же назначение. Если у вас есть несколько элементов и вам надо, чтобы они выглядели одинаково, то вы просто создаете один стиль и применяете его к нужным элементам. В принципе, вы пока можете пока не заморачиваться этим и начать использовать стили, когда наберетсь опыта. Ну а тем кому это интересно прямо сейчас - прошу в эту ветку нашего форума. Пользователь icamys на примере подробно разъясняет как использовать стили. 

 

На следующем уроке:

- научимся обращаться к View-элементам из кода и менять их свойства

В заключение, эта статья об layout параметры для view-элементов подчеркивает важность того что вы тут, расширяете ваше сознание, знания, навыки и умения. Надеюсь, что теперь ты понял что такое layout параметры для view-элементов и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Программирование мобильных устройств Android и IOs

создано: 2016-02-08
обновлено: 2021-03-13
132474



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:
Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Программирование мобильных устройств Android и IOs

Термины: Программирование мобильных устройств Android и IOs