- Пространство имён Tools
- tools:ignore
- tools:targetApi
- tools:locale
- tools:context
- tools:layout
- tools:showIn
- tools:menu
- tools:actionBarNavMode
- tools:listitem / listheader / listfooter
- tools:layoutManager
- tools:itemCount
- tools:openDrawer
- tools:minValue/tools:maxValue
- tools:src
- tools:layout_height/tools:layout_width
- tools:background
- tools:src=»http://developer.alexanderklimov.ru/android/studio/@tools:sample/»
- Основы верстки для нативных андроид приложений
- FrameLayout
- LinearLayout
- RelativeLayout
- TableLayout
- Alternate Layouts
- Стили
- Android — Layout File (XML)
- Table of Contents
- About
- Articles Related
- Syntax
- Example
- Linear
- Data-binding layout
- Location
- Default
- Multiple Screens support
- Directories
- Layout file decision
- Alias
- Built-in
- Load the XML Layout
- Attribute Namespace
- Android
- Tools
Пространство имён Tools
При создании нового проекта, когда вы проектировали макет для экрана активности, то, наверняка, замечали загадочные строчки у корневого элемента со словом tools:
Настало время сорвать покровы и использовать новые возможности.
Привычное пространство имён xmlns:android позволяет настраивать внешний вид и поведение компонентов в Android-приложении. А новое пространство имён xmlns:tools позволяет среде разработки (в нашем случае, Android Studio) правильно отобразить компоненты для просмотра в режиме дизайна.
Причём возможности данного инструмента гораздо выше, чем многие себе представляют.
Для начала приведу простой пример, который многие оценят по достоинству. Представьте себе, что у вас есть компонент пустой TextView, который получает текст с сервера. Чтобы визуально представить себе, как будет выглядеть текст, не соединяясь с сервером, вам нужно временно присвоить какой-нибудь текст. А потом не забыть удалить его при создании релиза. А можно поступить проще. Инструмент tools дублирует многие визуальные атрибуты пространства имён android и вы можете заменить его следующим образом.
В реальности у текстовой метки нет текста, но в окне предварительного просмотра вы можете видеть текст и оценить дизайн. Напомню, что эта настройка относится только к среде разработки, а не к вашему приложению. Поэтому теперь можно не волноваться, что однажды вы забудете удалить временный текст. Попробуйте теперь поменять цвет фона с помощью атрибута tools:background =»#ваш_цвет». Получилось?
Кроме визуальных атрибутов, tools может использоваться для взаимодействия с инструментом Lint, который пытается подсказать при проблемном коде. К этим атрибутам можно отнести
tools:ignore
Атрибут tools:ignore похож по своему поведению на Java-аннотацию @SuppressWarnings, подсказывающему инструменту Lint не обращать внимания на код. Аналогично можно не обращать на какой-то атрибут в XML-файле.
Самый распространённый случай — использование ImageView. Lint всегда недоволен, если у данного компонента нет атрибута android:contentDescription. Профессионально сделанное приложение должно использовать данный атрибут. Но в некоторых ситуациях ImageView может быть вспомогательным элементом экрана, не несущим смысловой нагрузки, например, разделитель. И тогда можно подавить предупреждение следующим образом.
tools:targetApi
Атрибут tools:targetApi работает аналогично аннотации @TargetApi и говорит о минимальной версии API, которая будет использована для ресурсов.
Например, ваш проект использует минимальный уровень minSdkLevel = 15, а вы используете объекты RippleDrawable в качестве ресурсов в общей папке, а не в папке drawable-v21. Но если вы контролируете ситуацию и знаете, что для старых устройств есть другие ресурсы, то можете подавить предупреждение:
tools:locale
Атрибут tools:locale поможет вам подавить предупреждения Lint о неправильном правописании, выступая в качестве грамар-наци. Проблема в том, что Lint содержит проверку орфографии только на английском языке. И если ваши строковые ресурсы содержат русский текст, то его предупреждения бесполезны. Отключаем их:
Рассмотрим теперь другие доступные атрибуты.
tools:context
Атрибут tools:context у корневого элемента позволяет определить связь между макетом и классом активности, в которой данный макет будет реализован. Помогает студии сформировать в окне предварительного просмотра внешний вид, подтягивая нужную тему.
tools:layout
Атрибут tools:layout используется в разметке фрагмента, чтобы вывести макет фрагмента на экране активности.
tools:showIn
Атрибут tools:showIn позволяет указать, какую разметку нужно использовать для вывода в окне предварительного просмотра. Это может пригодиться для тега merge:
tools:menu
Атрибут tools:menu подсказывает среде разработке, какое меню нужно отобразить в окне предварительного просмотра. Также используется в корневом элементе разметки.
Можно через запятую указать несколько меню, заданных в папке res/menu. Также кроме имени XML-файла можно использовать идентификаторы меню без символа @. В окне предварительного просмотра вы можете вызвать меню и нажать на пункт меню — вас сразу перенесёт в нужный файл.
Если не хотите выводить меню, то оставьте пустую строку. Данный атрибут не работает с темой Theme.AppCompat и производных от неё.
tools:actionBarNavMode
Атрибут tools:actionBarNavMode отвечает за внешний вид панели действий ActionBar. Он также размещается в корневом элементе разметки, не работает с темами Theme.AppCompat и Theme.Material и не действует при использовании Toolbar вместо ActionBar.
Доступны три варианта:
tools:listitem / listheader / listfooter
Также можно настроить внешний вид компонентов на основе AdapterView — ListView, GridView, ExpandableListView и т.д., указав нужную разметку для отдельных элементов списка, а также заголовка и футера. Появилась поддержка и RecyclerView.
Атрибуты для заголовка и футера могут работать только для ListView, а для GridView не работает.
Для сравнения как выглядят экраны активности с использованием tools: и без него.
Мы видим вкладки, элементы меню, другую разметку для списка.
tools:layoutManager
В RecyclerView можно использовать менеджер разметок с указанием различных параметров.
tools:itemCount
Обычно студия выводит десять элементов списка в RecyclerView. Вы можете изменить это поведение данным атрибутом.
tools:openDrawer
В студии 1.4 появился новый атрибут tools:openDrawer, управляющий состоянием навигационной шторки для DrawerLayout. При значении start будет показана шторка в выдвинутом виде. Доступны значения: start, end, left, right.
tools:minValue/tools:maxValue
Атрибуты для компонента NumberPicker для задания минимального и максимального значения.
tools:src
Можно указать графический ресурс. Полезно для ImageView, когда используется пустое изображение при запуске приложения и затем скачивается картинка с сервера. Позже появилась другая удобная возможность (см. ниже)
tools:layout_height/tools:layout_width
Ширина и высота.
tools:background
tools:src=»http://developer.alexanderklimov.ru/android/studio/@tools:sample/»
В студии версии 3.0 появились новые возможности. Теперь вы можете задать аватар, имя и случайный текст без создания собственных ресурсов. Это бывает полезно, когда ресурсы берутся из внешнего источника. Вам не нужно создавать временные ресурсы, которые увеличивают размер приложения и которые можно забыть удалить.
Например, можно задать изображение для ImageView:
Если у вас несколько ImageView, то изображения будут разными! Просмотреть весь набор можно в папке ..\plugins\android\lib\sampleData.
Можно задать текст для TextView:
- tools:text=»@tools:sample/full_names» — полное имя (также first_names, last_names)
- tools:text=»@tools:sample/cities» — город
- tools:text=»@tools:sample/us_zipcodes» — индексы США
- tools:text=»@tools:sample/us_phones» — телефонные номера США в формате (800) 555-xxxx
- tools:text=»@tools:sample/date/ddmmyy» — дата (date/day_of_week, date/mmddyy, date/hhmm, date/hhmmss)
- tools:text=»@tools:sample/lorem» — случайный текст
- tools:text=»@tools:sample/lorem/random» — большой случайный текст
Можно задать случайный фон
Пример применения некоторых атрибутов.
Но это ещё не всё. Если вас не устраивают изображения (там нет котов!) или тексты, предлагаемые студией, то можно задать свои изображения и тексты. Из контекстного меню папки res выбираем New | Sample Data Directory. В модуле app появится папка sampleData. Создайте текстовый файл с именем names и добавьте построчно различные имена: Барсик, Мурзик, Рыжик, Васька и т.д.
Заменим tools:text=»@tools:sample/full_names» на tools:text=»@sample/names». Теперь вместо непонятных иностранных имён будут отображаться правильные нормальные имена.
По такому же принципу можно создать собственные изображения для аватаров. В папке sampleData создайте подпапку avatars (имя произвольное) и разместите в ней нужные файлы изображений.
Используем атрибут для аватаров — tools:src=»http://developer.alexanderklimov.ru/android/studio/@sample/avatars».
Можно создать сложный вариант сочетаний имён и городов. Опять в той же папке sampleData создаём JSON-файл следующего содержания.
Можете обращаться к созданному файлу через атрибуты:
Источник
Основы верстки для нативных андроид приложений
( пользоваться не рекомендуется, deprecated )
AbsoluteLayout — означает что каждый элемент верстки будет иметь абсолютную позицию относительно верхнего левого угла экрана задаваемую с помощью координат x и y. Т.е. верхнийлевый угол экрана при AbsoluteLayout имеет координаты x = 0, y = 0.
Позиция указывается в атрибутах элемента android:layout_x и android:layout_y.
Пример кода:
FrameLayout
FrameLayout — тип верстки внутри которого может отображаться только один элемент в строке. Т.е. если внутри FrameLayout вы поместите несколько элементов, то следующий будет отображаться поверх предыдущего.
Пример кода:
LinearLayout
LinearLayout — тип верстки при котором область верстки делится на строки и в каждую строку помещается один элемент. Разбиение может быть вертикальное или горизонтальное, тип разбиения указывается в атрибуте LinearLayout android:orientation. Внутри верстки возможно комбинировать вертикальную и горизонтальную разбивки, а кроме того, возможна комбинация нескольких разных типов верстки например использование LinearLayout внутри FrameLayout.
Пример вертикальной разбивки LinearLayout:
Пример горизонтальной разбивки LinearLayout:
Комбинация нескольких LinearLayout:
RelativeLayout
RelativeLayout — тип верстки при котором позиционирование элементов происходит относительно друг друга и относительно главного контейнера.
За то, каким образом будут позиционироваться элементы отвечают следующие атрибуты:
Атрибуты позиционирования относительно контейнера
- android:layout_alignParentBottom – Низ элемента находится внизу контейнера
- android:layout_alignParentLeft – Левая часть элемента прилегает к левой части контейнера
- android:layout_alignParentRight – Правая часть элемента прилегает к правой части контейнера
- android:layout_alignParentTop – Элемент находится в верхней части контейнера
- android:layout_centerHorizontal – Элемент позиционируется по центру относительно горизонтального размера контейнера
- android:layout_centerInParent – Элемент позиционируется по центру относительно горизонтального и вертикального размеров размера контейнера
- android:layout_centerVertical – Элемент позиционируется по центру относительно вертикального размера контейнера
Атрибуты позиционирования относительно других элементов.
В качестве значений этих атрибутов ставятся id элемента относительно которого будет производится позиционирование.
android:layout_above – Распологает элемент над указанным
android:layout_below – Распологает элемент под указанным
android:layout_toLeftOf – Распологает элемент слева от указанного
android:layout_toRightOf – Распологает элемент справа от указанного
Выравнивание относительно других элементов.
android:layout_alignBaseline – Выравнивает baseline элемента с baseline указаннго элемента
android:layout_alignBottom – Выравнивает низ элемента по низу указанного элемента
android:layout_alignLeft – Выравнивает левый край элемента с левым краем указанного элемента
android:layout_alignRight – Выравнивает правый край элемента с правым краем указанного элемента
android:layout_alignTop – Выравнивает верхнюю часть элемента в соответствие с верхней частью указанного элемента
TableLayout
TableLayout — табличная верстка.
Организует элементы в строки и столбцы таблицы.
Для организации строк служит таг
Alternate Layouts
Alternate Layouts — альтернативная верстка. Позволяет использовать различную верстку для различных ориентаций экрана.
XML для альтернативной верстки помещается в папки проекта:
res/layout-land – альтернативная верстка для landscape UI
res/layout-port –альтернативная верстка для portrait UI
res/lauout-square – альтернативная верстка для square UI
и перед тем как получить макет из res/lauout система проверяет наличие файлов в этих папках.
И в завершении немного о стилях.
Стили
Во первых стили элемента могут быть описаны в атрибутах самого элемента.
Например:
Кроме того стили можно вынести в отдельный xml файл и сохранить его в папке res/values/
Напимер:
Если мы вынесем стили в отдельный файл, то для описания стилей элемента будем использовать атрибут style.
Источник
Android — Layout File (XML)
Table of Contents
About
A layout XML is a declarative way of creating an UI.
To define the GUI in android, you can do it:
The XML vocabulary maps to the subclasses of ViewGroup (UI container) and View (widgets) .
The advantage to declaring your UI in XML is that:
Articles Related
Syntax
Each layout file must contain:
The XML attribute reference can be found in the API References
160 DPI 1x HDPI
240 DPI 1,5x XHDPI
320 DPI 2x XXHDPI
Example
Linear
Data-binding layout
Data-binding layout files are slightly different and start with a root tag of layout followed by a data element and a view root element.
Location
Default
All XML layout file are saved in the following directory:
Multiple Screens support
Directories
Layout file decision
The layout are chosen in a cascade way. For instance, with this directory structure:
The following layout file will be chosen:
Application is running on | Height | Width | Smallest Width (sw) | main.xml Directory | detail.xml directory | item.xml directory |
---|---|---|---|---|---|---|
Nexus 5 | 640 dp | 360 dp | 360 dp | res/layout | res/detail.xml | res/item.xml |
Nexus 7 | 960 dp | 600 dp | 600 dp | res/layout | res/layout-sw600dp/detail.xml | res/layout-sw600dp/item.xml |
Nexus 10 | 800 dp | 1280 dp | 800 dp | res/layout | res/layout-sw600dp/detail.xml | res/layout-sw720dp/item.xml |
Alias
The smallest-width qualifier is available only on Android 3.2 and above. Therefore, you should also still use the abstract size bins (small, normal, large and xlarge) to be compatible with earlier versions. See Layout Aliases
You can use refs.xml for your alias because it’a a more descriptive name thant layout.xml
Built-in
Android has standard layout. They all begins with android.R.layout . See android/R.layout
Load the XML Layout
To use the layout XML, you inflate it from an activity. See Android — Inflate (a layout XML to a view UI object).
Attribute Namespace
App Attributes are custom attributes defined in your app, whether by your code or by libraries you import.
It’s a single global namespace for custom attributes — i.e., attributes not defined by the android system.
App attributes that don’t exist are silently ignored.
For instance, the appcompat-v7 library uses this app custom attributes mirroring the android: namespace ones to support all prior versions of android.
Android
The android namespace are attribute defined by the android system.
Tools
the tools namespace that enable design-time features (such as which layout to show in a fragment) or compile-time behaviors (such as which shrinking mode to apply to your XML resources).
Источник