- Palette
- Наложение двух компонентов
- Идентификаторы
- Tooltip (Подсказка)
- v.3.4-3.1
- Что такое TAG и id в android?
- Основы верстки для нативных андроид приложений
- FrameLayout
- LinearLayout
- RelativeLayout
- TableLayout
- Alternate Layouts
- Стили
- Android Tips and Tricks
- Android Studio
- Не забывайте использовать шорткаты
- Используйте плагины для повышения эффективности
- Используйте Live Templates при разработке в Android Studio
- Постфиксное автодополнение кода в Android Studio
- Используйте тему Darcula в Android Studio
- Не используйте неудобный/мелкий шрифт
- Используйте codestyle
- Используйте Встроенный терминал в Android Studio
- Используйте Memory/Network/CPU мониторинги в Android Studio для профилирования вашего приложения
- Эмулятор
- Vysor
- DeskDock
- Выбирайте лучшие инструменты при написании кода
- Полезные советы по UI/UX
- Движение
- Шрифты, отступы
- Иконки
- Ripple
- Остальные пункты
- Другие ресурсы
- Cделайте закладки в своём браузере на различные популярные ресурсы
- Используйте бесплатные mock API для тестирования
Palette
На панели Palette находятся компоненты пользовательского интерфейса: View, Layouts, ViewGroup.
Виджет — это объект View, который служит интерфейсом для взаимодействия с пользователем. Если сказать предыдущую умную фразу простым языком, понятным даже коту, то виджеты — это обычные элементы управления: кнопочки, текстовые поля, флажки, переключатели, списки.
В сети можно встретить разные способы наименования на русском — контрол, вьюха, представление и т.д. Мы с вами будем использовать термин компонент. А знаете почему? Берём крайние буквы слова, отсчитываем по три следующих символа и выкидываем их на свалку. Что остаётся? Ну вы поняли — к омп о нен т. Красиво спрятались.
Кстати, в последних версиях Android Studio в режиме Design появилась панель Component Tree, хотя раньше в Eclipse аналогичная вкладка называлась Outline. Видимо, разработчики из Гугла читали эту статью и внесли поправки.
Стандартные элементы имеют привычные свойства: ширина, высота, цвет и т.п.
Другие настройки могут сбить с толку других программистов, поэтому не изощряйтесь в остроумии.
Выравнивание (gravity) — это ориентация в контейнере (alignment). Например, вы хотите выровнять текст надписи по правому краю, тогда свойство gravity будет иметь значение right. Набор значений для gravity достаточно ограничен: left, center, right, top, bottom, center_vertiсаl, сliр_horizontal и еще некоторые.
Обратите внимание, что в Android есть два сходных атрибута выравнивания: android: gravity и android: layout_gravity. Разница заключается в том, что android: gravity — это настройка, используемая компонентом, а android: layout_gravity применяется контейнером. Например, можно установить для android: gravity значение center, чтобы текст в EditText был выровнен по центру. Аналогичным образом можно выровнять EditText по правому краю LinearLayout (который является контейнером), установив android: layout_gravity=»right».
У компонентов также есть атрибут android:tag, который можно использовать для хранения каких-то промежуточных данных. Также можно устанавливать теги программно. Напишем надуманный пример:
Наложение двух компонентов
Вы можете использовать не только положительные, но и отрицательные значения для атрибута layout_marginBottom или родственных ему. При этом можно наблюдать эффект, когда следующий компонент будет «наезжать» на ваш компонент.
Идентификаторы
Те компоненты, к которым вы будете обращаться в коде, нужно обязательно присваивать идентификаторы. Кроме того, они помогут сохранить состояние при поворотах: текст в текстовых полях, статус переключателей и т.д.
Tooltip (Подсказка)
В Android 8.0 (API 26) у View появилась возможность присвоить компоненту подсказку, которая появляется при долгом нажатии или при прохождении курсора мыши (бывает и такое).
Подсказку можно установить через XML-атрибут.
Можно установить подсказку программно, а также получить текст.
v.3.4-3.1
В версии 3.2 добавили ChipGroup, Chip, BottomAppBar. В версии 4.1 появился новый раздел Helpers. В версии 4.2 список компонентов снова изменился.
Источник
Что такое TAG и id в android?
Я знаю, как работает оператор switch, но я не знаю, что это значит (R.id.webbutton). Может кто-нибудь объяснить, что это такое, а также что такое TAG? Есть ли руководство для новичков? Я имею в виду абсолютных новичков.
Идентификатор является идентификатором ваших компонентов xml [могут быть представления, такие как textview, edittext … или viewgroup, такие как linearlayout, relativelayout … или что-нибудь еще] в xml, просто вы можете получить ссылку на них в java-коде, сказав
(R.id. «id вашего представления в xml»)
Но во-первых, вы должны использовать setContentView (R.layout.) Имя xml-файла в макете / res в своем проекте ») этот xml-файл, который вы хотите использовать его компоненты.
TAG я использую его, когда я хочу показать сообщение в logcat [инструмент в eclipse, который вы можете просматривать ваши сообщения приложения, когда он запущен], указав String TAG = yourclassname.class.getsimpleName ();
И использовать его в Log.d (TAG, «любая строка здесь» + какая-то переменная в моем классе, я хочу знать ее значение в определенное время, когда приложение работает);
Я надеюсь, что я разъяснил вам.
Идентификаторы и теги
Представления могут иметь идентификатор целого числа, связанный с ними. Эти идентификаторы обычно назначаются в XML-файлах макета и используются для поиска определенных видов в дереве представлений. Общим примером является:
Определите кнопку в файле макета и присвойте ему уникальный идентификатор.
Идентификаторы просмотра не обязательно должны быть уникальными по всему дереву, но это хорошая практика, чтобы убедиться, что они по меньшей мере уникальны в той части дерева, которое вы ищете.
В отличие от идентификаторов, теги не используются для идентификации видов. Теги – это, по сути, дополнительная информация, которая может быть связана с представлением. Они чаще всего используются в качестве удобства для хранения данных, связанных с представлениями в самих представлениях, а не путем помещения их в отдельную структуру.
Теги могут быть указаны с значениями символьной последовательности в макете XML как один тег, используя атрибут android: tag или несколько тегов, используя дочерний элемент:
Теги также могут быть указаны с произвольными объектами из кода с помощью setTag(Object) или setTag(int, Object) .
Начните с учебников . (Если вы настолько новичок, что у вас еще нет среды разработки, тогда начните с установки SDK .)
Когда вы используете средство ведения журнала консоли в Android, первым аргументом методов ведения журнала является тег, который можно использовать для фильтрации выходных данных logcat. Типичный стиль программирования:
Источник
Основы верстки для нативных андроид приложений
( пользоваться не рекомендуется, 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 Tips and Tricks
Android Studio
Не забывайте использовать шорткаты
Описание | Mac | Linux/Win |
Быстрый поиск по настройкам, действиям в IDE | Cmd+Shift+A | Ctrl+Shift+A |
Переопределить метод родительского класса | Cmd+O | Ctrl+O |
Поиск файла по имени | Cmd+Shift+O | Ctrl+Shift+N |
Список недавно редактируемых файлов | Cmd+Shift+E | Ctrl+Shift+E |
Список недавно открытых файлов | Cmd+E | Ctrl+E |
Последний редактируемый файл | Cmd+Shift+Backspace | Ctrl+Shift+Backspace |
Найти все места, где используется метод / переменная | Opt+F7 | Alt+F7 |
Как предыдущий пункт, только во всплывающем окне | Cmd+Opt+F7 | Ctrl+Alt+F7 |
Приведение кода в соответствие code style | Cmd+Opt+L | Ctrl+Alt+L |
Окружить блок кода конструкцией(if, else, try) | Opt+Cmd+T | Alt+Ctrl+T |
Открыть терминал | Opt+F12 | Alt+F12 |
Сгенерировать Setter/Getters/ | Cmd+N | Alt+Ins |
Поиска класса по имени | CMD+O | Ctrl+N |
Рефакторинг имени | Shift+F6 | Shift+F6 |
Быстрое исправление | Opt+Enter | Alt+Enter |
Перейти к объявлению переменной, класса, метода | Cmd+B | Ctrl+B |
Показать список параметров для метода | Cmd+P | Ctrl+P |
Меню рефакторинга | Ctrl+T | Ctrl+Alt+Shift+T |
Убить процесс | Cmd+F2 | Ctrl+F2 |
Поиск по всему проекту | Shift+Shift | Shift+Shift |
Удалить строку | Cmd+Backspace | Ctrl+Y |
Продублировать строку | Cmd+D | Ctrl+D |
Расширить/Уменьшить выделенное | Opt+Up/Down Arrow key | Shift +Ctrl+W |
Многострочное выделение | Ctrl+G | Alt+J |
Полный список шорткатов | MacOSX | Linux/Win |
Используйте плагины для повышения эффективности
- KeyPromoter
Этот плагин заставит вас страдать, показывая большой уродливый попап с комбинацией клавиш, которую следовало бы использовать вместо нажатия на кнопку в IDE. Через какое-то время вы уже на автомате будете использовать шорткаты, лишь бы не видеть этот ужасный попап.
String Manipulation
Упрощает работу со строками, позволяет cортировать, переводить в другие кодировки, убирать дубликаты, триммить текст и ещё многое другое.
Lines Sorter
Добавляет иконку в меню для сортировки выбранных строк или целого файла, если ничего не выбрано.
Findbugs
Статический анализатор байткода для поиска багов в Java коде c помощью Android Studio.
Sonar Lint
Плагин, который в рантайме показывает информацию о новых багах и нарушениях качества кода на Java, JavaScript и PHP.
Checkstyle
Плагин, который сканирует Java файлы с помощью Android Studio и проверяет их на соответствие настройкам. Может быть интегрирован в вашу систему сборки, чтобы запрещать сборки с нарушениями.
Плагин, который добавляет ADB команды (установка и удаление приложения, перезапуск приложения и тд.) в Android Studio и Intellij.
Используйте Live Templates при разработке в Android Studio
Template | Описание |
newInstance | Генерирует статический метод `newInstance` внутри Фрагмента |
Toast | Генерирует Toast.makeText(context, «», Toast.LENGTH_SHORT).show(); |
fbc | findViewById с кастом к нужном типу View |
const | Определить константу типа int |
logd | Генерирует Log.d(TAG, «»); |
logm | Вынести в лог текущее имя метода и его аргументы. |
logr | Вынести в лог результат текущего метода |
logt | Статическая строка TAG для лога, с текущим именем класса |
psf | public static final |
sout | Печатает строку в System.out |
soutm | Печатает имя класса и имя метода в System.out |
soutp | Печатает аргументы и значения метода в System.out |
visible | Установить видимость View к VISIBLE |
gone | Установить видимость View GONE |
noInstance | Приватный конструктор без аргументов, чтобы запретить создание сущностей |
→ Полный список Live Templates в Android Studio
Постфиксное автодополнение кода в Android Studio
В Android Studio/IntelliJ есть специальный механизм дополнения кода, который позволяет применить конструкцию к определённой переменной.
Template | Описание |
Полный список доступных постфиксных дополнений кода вы можете найти в Settings → Editor → Postfix Templates
Используйте тему Darcula в Android Studio
Да, я осознаю, что это больше вопрос предпочтений. Однако поверьте мне, что использование тёмной темы сократит нагрузка на ваши глаза.
Не используйте неудобный/мелкий шрифт
По возможности старайтесь использовать такой шрифт, который удобно читать и не доставляет дискомфорта для ваших глаз. Я использую Menlo font.
Используйте codestyle
Вам следует использовать стандартный codestyle. Для примера посмотрите на AOSP Codestyle или Square IntelliJ Codestyle
Используйте Встроенный терминал в Android Studio
Используйте Memory/Network/CPU мониторинги в Android Studio для профилирования вашего приложения
Эмулятор
Кроме использования реальных девайсов, вы также должны использовать эмуляторы ввиду простоты их настройки и использования. Также вы можете легко настраивать на них разрешение и версию API для тестирования. Genymotion, Intel эмулятора поставляемый вместе с SDK
Vysor
Это очень полезный инструмент, достойный отдельного упоминания. По сути, он позволяет стримить содержимое физического Android устройства на экран ноутбука. Очень удобно, когда вам нужно продемонстрировать демо вашего приложения на презентации. Мы можем взаимодействовать с реальным устройством, и всё это будет представлено прямо на экране ноутбука. Есть бесплатная и платная версии, и платная определённо стоит того, чтобы её купить.
DeskDock
Если вам необходимо манипулировать физическим Android устройством (используя клавиатуру и мышь), то это приложение замечательно с этим справится. Позволяет вам управлять вашим Android устройством, как если бы это была часть рабочего стола компьютера. Бесплатная версия позволяет использовать мышь, Платная версия позволяет использовать клавиатуру и другие возможности. С этим приложением можно тестировать приложение, не отрывая рук от клавиатуры ноутбука.
Выбирайте лучшие инструменты при написании кода
- Используйте OkHttp вместо HttpUrlConnect.
HttpUrlConnect содержит определённое число багов. Okhttp довольно красиво решили их. Анонс Okhttp.
Ссылайтесь на локальные `aar` файлы следующим образом.
Специальная программа для Android разработчиков, с помощью которой позволяет анализировать файлы типа .apk, .jar, .class, .dex, .aar, .so. Может показать информацию о полях и методах класса, зависимостях .apk, количество методов, используемых приложением и тд.
Позволяет дебажить ваши приложения используя Chrome Dev Tools. Включает в себя мониторинг сети (Network Monitor), отображение Shared Preferences.
Программа для анализа расхода батареи
Избегайте использования ‘+’ для указания версий используемых библиотек.
Это позволит вам избежать неожиданных багов или проблем со сборкой, если в новой версии изменится API. А также не придётся при сборке каждый раз открывать интернет-соединение для проверки последней актуальной версии зависимой библиотеки.
Если у вас всё-таки есть png, сожмите их. Изучите [TinyPNG](https://tinypng.com) для этого.
Разделяйте ваш .apk с помощью gradle, когда вы используете нативный код. Не смешивайте всё вместе, потому что потом будете страдать, разбираясь в исходниках.
Исключить gradle таску при сборке. Предположим вы хотите исключить задачу ‘javaDoc’, в таком случае используйте ‘-x’ опцию и имя таски, в данном примере ‘javaDoc’
Учитывая скорость разработки android библиотек и их обновлений, в какой-то момент вы встретитесь с конфликтом зависимостей в вашем приложении. Gradle позволяет решать эти проблемы официальная документация
Android использует Gradle как систему сборок, что позволяет упростить множество вещей и написать свои таски для автоматизации. Пост на reddit, который содержит множество полезных gradle скриптов.
— Перейдите на gradle версии 3.1.
Выполните следующую команду в директории вашего проекта для обновления gradle wrapper.
— Установите опции сборки в глобальном в `gradle.properties` файле
Остановить процесс сборки приложения с помощью gradle
Настройте gradle для автоматической загрузки отсутствующих компонентов android sdk.
Установить следующую опцию в глобальном gradle.properties файле.
Это экспериментальная опция, и она загружает только build tools и platforms, но не обновляет Google или Support Repository
JCenter включает в себя MavenCentral.
Перейдите в директорию
/.gradle/caches/ и удалите всё содержимое в папке cache.
Откройте SDK Manager и заново синхронизируйте все саппортные библиотеки и google play services.
Далее обновите gradle зависимости в проекте.
Теперь всё должно находиться в нормальном состоянии и работать корректно.
Настройте удобные `adb` алиасы для вашего терминала.
Добавьте следующие команды к вашему
/.zshrc файлу, сохраните и перезапустите терминал. После этого можете использовать как показано в столбце Использование.
Алиас | Использование |
Настройте Android Studio падать при сборке, если код содержит //STOPSHIP.
Чтобы включить в lint проверку на //STOPSHIP , добавьте в ваш `build.gradle`
Если у вас есть //STOPSHIP комментарий в коде, релизная сборка не соберётся. Кроме этого, вы также можете включить в Android Studio подсветку таких комментариев (по умолчанию выключено). Preferences → Editor → Code Style → Inspections . Ищите в поиске STOPSHIP и устанавливайте флажок для подсветки.
Скопируйте нужную библиотеку. Вставьте в ваш build.gradle.
Используйте Dryrun, чтобы быстро и удобно протестировать библиотеку или пример приложения.
Отображайте результаты юнит тестов напрямую в консоль.
—offline флаг говорит gradle, чтобы при сборке были использованы зависимости из кэша. Если запускать сборку с этим флагом, gradle никогда не попробует выкачать зависимости по сети. Если необходимые модули отсутствуют в кэше — приложение не соберётся
Прогоняйте юнит тесты как можно быстрее:
Полезные советы по UI/UX
Движение
Material Design использует физику реального мира как основу. Объекты в реальном мире не двигаются линейно, они двигаются по искривлённым траекториям а также с ускорением и замедлением в зависимости от ситуации.
Таким образом, вы должны манипулировать свойствами и анимировать объекты так, чтобы это выглядело натурально и естественно. Например машина, выезжающая за экран начинает движение медленно, постепенно ускоряясь по приближению к краю экрана. Аналогично ui элементы должны перемещаться используя такие классы как AccelerateInterpolator, FastOutSlowInInterpolator и другие.
Шрифты, отступы
В принципе, нестандартные шрифты можно использовать как часть брэндинга, однако лучше всё-таки остановиться на стандартных Roboto и Noto, если это возможно, в особенности для основного текста из-за их узнаваемости и частого использования.
Roboto покрывает Латинские, Греческие и Кириллические символы, Noto покрывает остальные языки.
Балансировка яркости шрифта — это один из наиболее важных параметров современной стилистики. Основная идея заключается в том, что чем меньше шрифт, тем более ярким он должен быть, и наоборот.
Сам текст должен быть выровнен по сетке с ячейкой 4dp.
Идеальная длина текста для больших блоков от 40 до 60 символов в строке.
Иконки
Иконки должны быть размером 48dp c краями 1dp, что эквивалентно:
48px x 48px — mdpi
72px x 72px — hdpi
96px x 96px — xhdpi
144px x 144px — xxhdpi
192px x 192px — xxxhdpi
Дополнительная иконка с размером 512px x 512px должна быть предоставлена для Google Play.
То же касается иконки с размером 1024px x 500px, которая будет отображаться в шапке на странице вашего приложения.
Ripple
Когда реализуете Ripple эффект, используйте ?attr/selectableItemBackground вместо ?android:attr , подробнее. Когда реализуете Ripple эффект на элементе как Button используйте:
Когда реализуете Ripple, который выходит за края View, как например у ImageView, используйте:
Остальные пункты
Элементы в соответствии с Material Design Views должны быть расположены на сетке с ячейкой размерами 8dp, если это возможно. Благодаря этому подходу UI выглядит структурированным и приятным.
Если вам нужна ссылка на какой-нибудь элемент ViewGroup (LinearLayout, FrameLayout, RelativeLayout, etc.) и вам не нужны никакие специфичные методы именно для этого типа ViewGroup, то не храните конкретный тип, используйте просто ViewGroup.
Другие ресурсы
Cделайте закладки в своём браузере на различные популярные ресурсы
Используйте бесплатные mock API для тестирования
Все примеры, перечисленные ниже, тем или иным образом позволяют тестировать ваше приложение без бэкенда. Если понадобится воспользоваться, пробегитесь по списку и посмотрите, какой из пунктов максимально удовлетворяет вашим запросам и потребностям по функционалу.
Источник