В этой серии советов мы более подробно рассмотрели некоторые новые функции и инструменты Android, анонсированные в этом году на Google I / O.
В этом посте мы сосредоточимся на Android Wear.
Google уже некоторое время предоставляет компоненты пользовательского интерфейса Android Wear через выделенную библиотеку поддержки носимых устройств, но это все изменится!
В этом году Google объявил, что различные компоненты, входящие в состав библиотеки поддержки носимых устройств, будут объявлены устаревшими, объединены или перенесены в библиотеку поддержки Android. В этой статье мы рассмотрим, какие компоненты будут объединены, перемещены и удалены, и как вы можете начать использовать новый модуль Wear для библиотеки поддержки Android сегодня .
Мы также рассмотрим некоторые новые инструменты, разработанные для облегчения работы с API-интерфейсом «Сложности» в Android Wear.
Новая библиотека Android Wear UI
В этом году на Google I / O команда Android Wear объявила, что основная часть библиотеки носимых носителей перемещается в библиотеку поддержки Android. Специфичные для Wear компоненты станут основой нового модуля support-wear, аналогичного другим модулям в библиотеке поддержки Android, таким как support-recylerview
и support-design
.
Согласно сессиям Android Wear на Google I / O, мы можем ожидать, что новый модуль Wear выйдет из бета-версии одновременно с официальным выпуском Android O.
Однако не все компоненты из библиотеки поддержки носимых устройств будут перемещены в библиотеку поддержки Android. Google также объявил, что некоторые компоненты из библиотеки поддержки носимых устройств будут:
-
Объединенное. Компоненты, применимые как к носимым, так и к портативным устройствам, будут объединены либо в платформу Android, либо в более общие модули поддержки. Компоненты, которые должны быть объединены, включают
CircledImageView
,DelayedConfirmationView
иActionButton
. -
Устаревшее. Google собирается отказаться от компонентов пользовательского интерфейса Android Wear, связанных с шаблонами дизайна, которые не пользуются популярностью у пользователей Android Wear. В частности, Google удалит двумерную пространственную модель, которая позволяла пользователям Android Wear перемещаться по горизонтали и вертикали, и заменит ее вертикальной
LinearLayout
. Все классы, связанные с двумерной пространственной моделью, будут устаревшими, включаяGridViewPager
, кнопки действий и макеты действий.
Хотя эта миграция продолжается, Google уже интегрировала некоторые компоненты Android Wear в версию 26.0.0 Beta1 библиотеки поддержки Android.
-
BoxInsetLayout
: этоBoxInsetLayout
формыFrameLayout
который может помочь вам создать единый макет, которыйFrameLayout
как для квадратных, так и для круглых циферблатов. Когда ваш макет отображается на круглом экране,BoxInsetLayout
всех своих дочернихBoxInsetLayout
в воображаемый квадрат в центре круглого экрана. Вы можете указать, как ваши элементы пользовательского интерфейса будут расположены в этом центральном квадрате, используя атрибутlayout_box
. Когда ваше приложение отображается на квадратном экране, Android игнорирует атрибутlayout_box
и использует нулевую вставку окна, поэтому ваши представления будут расположены так, как если бы ониFrameLayout
внутри обычногоFrameLayout
. -
SwipeDismissFrameLayout
: это макет, который можно использовать для реализации пользовательских взаимодействий для вашихView
и фрагментов. Как правило, вы будете использоватьSwipeDismissFrameLayout
чтобы позволить пользователям отклонять представления и фрагменты, проводя по экрану, по существу копируя функциональность кнопки « Назад» на смартфонах и планшетах Android. -
WearableRecyclerView
: это специфичная для Wearable реализацияRecyclerView
которая помогает вам создавать более эффективные макеты для круглых дисплеев.WearableRecyclerView
более эффективно использует кривизну круглого экрана и обычно используется для реализации изогнутых списков.WearableRecyclerView
также дает вам возможность использовать жесты круговой прокрутки в вашем приложении с помощьюsetCircularScrollingGestureEnabled()
.
Добавление нового модуля Android Wear
Чтобы начать использовать новый модуль Android Wear, вам необходимо установить библиотеку поддержки Android 26.0.0 Beta1, что приведет нас к следующему объявлению Google I / O.
На мероприятии этого года Google объявил, что будет распространять все будущие версии библиотеки поддержки Android (26.0.0 Beta1 и выше) только через репозиторий Google Maven.
Для загрузки библиотеки поддержки Android из этого репозитория вам просто нужно добавить репозиторий Google Maven в файл build.gradle :
1
2
3
4
|
repositories {
maven { url ‘https://maven.google.com’ }
jcenter()
}
|
Затем вы можете настроить зависимости компиляции как обычно, поэтому откройте файл build.gradle вашего носимого модуля и добавьте библиотеку Wear как зависимость проекта:
1
2
3
4
5
6
|
dependencies {
compile fileTree(dir: ‘libs’, include: [‘*.jar’])
//Add the following//
compile ‘com.android.support:wear:26.0.0-beta1’
|
Чтобы добавить компонент из библиотеки Android Wear UI в свой интерфейс, просто откройте файл ресурсов макета и убедитесь, что вы используете новое полное имя пакета. По сути, это означает замену android.support.wearable.view
на android.support.wear.widget
. Например, здесь я использую класс BoxInsetLayout
из библиотеки поддержки Android:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<?xml version=»1.0″ encoding=»utf-8″?>
<android.support.wear.widget.BoxInsetLayout
http://schemas.android.com/apk/res/android»
xmlns:app=»http://schemas.android.com/apk/res-auto»
xmlns:tools=»http://schemas.android.com/tools»
android:layout_width=»match_parent»
android:layout_height=»match_parent»
android:background=»@color/dark_grey»
android:padding=»@dimen/box_inset_layout_padding»
tools:context=»com.jessicathornsby.myapplication.MainActivity»
tools:deviceIds=»wear»>
<FrameLayout
android:layout_width=»match_parent»
android:layout_height=»match_parent»
android:padding=»@dimen/inner_frame_layout_padding»
app:layout_box=»all»>
<TextView
android:id=»@+id/text»
android:layout_width=»wrap_content»
android:layout_height=»wrap_content»
android:text=»Hi World» />
</FrameLayout>
</android.support.wear.widget.BoxInsetLayout>
|
Чтобы импортировать этот класс в ваш Java-файл, вам просто нужно использовать то же имя, поэтому старый:
1
|
import android.support.wearable.view.BoxInsetLayout;
|
Становится новым:
1
|
import android.support.wear.widget.BoxInsetLayout;
|
Более простая интеграция с API-интерфейсом «Осложнения»
Пользователи Android Wear могут выбирать из огромного разнообразия стилей циферблатов, и хотя API-интерфейс «Осложнения» дает сторожам полный контроль над тем, как они рисуют эти данные, эта гибкость может затруднить добавление поддержки сложностей на циферблаты.
В этом году на Google I / O команда Android Wear представила некоторые дополнения, которые должны упростить работу с API-интерфейсом Complication.
ComplicationDrawable
ComplicationDrawable
— это новое решение, которое обещает обрабатывать все стили и макеты вашей сложности для вас.
Если вы создаете ComplicationDrawable
но не устанавливаете какие-либо параметры стиля, то вы получите внешний вид по умолчанию, но вы также можете использовать ComplicationDrawable
для стилизации каждой части вашего усложнения, включая его цвет фона, радиус угла и границу.
Если ваш проект нацелен на API 24 или выше, вы можете определить объект ComplicationDrawable
, создав выделенный файл ресурсов макета в папке вашего проекта / res / drawable .
Откройте файл XML, а затем создайте ComplicationDrawable
используя следующие теги:
01
02
03
04
05
06
07
08
09
10
11
|
<android.support.wearable.complications.rendering.ComplicationDrawable
…
…
…
<ambient
//Define the attributes you want to use when the device is in ambient mode//
/>
</android.support.wearable.complications.rendering.ComplicationDrawable>
|
Обратите внимание, что атрибуты, определенные на верхнем уровне, применяются как к стандартному режиму, так и к режиму ambient, если только вы не переопределите эти атрибуты в разделе <ambient>
файла.
Затем вам нужно передать данные о сложности в ваш чертеж:
1
2
3
4
5
|
@Override
public void onComplicationDataUpdate(int id, ComplicationData data) {
myComplicationDrawable.setComplicationData(data);
}
|
И, наконец, нарисуйте свою сложность, вызвав setBounds
для вашего drawable:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
@Override
public void onDraw(Canvas canvas, Rect bounds) {
if(haveChanged(bounds)) {
myComplicationDrawable.setBounds(
complicationBoundsWithin(bounds));
}
//Call draw on the ComplicationDrawable//
myComplicationDrawable.draw(canvas, currentTimeMillis);
…
…
…
}
|
TextRenderer
Большинство сложностей включают некоторую форму текста, и TextRenderer
— это новый класс, который вносит ряд небольших, но мощных изменений в способ отображения текста усложнения на холсте.
Вы можете использовать TextRenderer
чтобы указать границы, с которыми должен работать ваш текст усложнения, и TextRenderer
затем изменит размер текста или расположит его по нескольким строкам, чтобы соответствовать этой области. Кроме того, когда экран переходит в режим «Всегда включен» в Android Wear, TextRenderer
корректирует текст, скрывая символы и стили, которые не подходят для этого режима.
Чтобы воспользоваться этим новым классом, вам нужно создать TextRenderer
при инициализации циферблата, а затем передать ему TextPaint
вы хотите использовать, который определяет атрибуты стиля, такие как шрифт и цвет текста:
1
2
3
4
5
6
7
|
@Override
public void onCreate(SurfaceHolder holder) {
…
…
…
myTextRenderer = new TextRenderer();
myTextRenderer.setPaint(myTextPaint(TextPaint);
|
Вам нужно создать TextRenderer
для каждого поля, поэтому вам также нужно создать TextRenderer
для текста заголовка:
1
2
3
4
5
6
|
myTitleRenderer = new TextRenderer();
myTitleRenderer.setPaint(myTitlePaint);
…
…
…
}
|
Когда пришло время рисовать, вам нужно установить текст в рендерере, вызвав setText
, а затем получить текст, вызвав getText
:
01
02
03
04
05
06
07
08
09
10
11
12
|
public void onDraw(Canvas canvas, Rect bounds) {
…
…
…
myTextRenderer.setText(myComplicationText.getText(
Context, data.getShortText(), currentTimeMillis));
myTextRenderer.draw(canvas, bounds);
…
…
…
}
|
Обратите внимание, что многие сложности зависят от времени, поэтому currentTimeMillis
включен в приведенный выше фрагмент кода.
Вывод
В этой статье мы рассмотрели, как добавить новую библиотеку пользовательского интерфейса Android Wear в ваш проект, и как вы можете начать работу с рядом компонентов из этой библиотеки уже сегодня. Мы также рассмотрели два компонента, которые обещают значительно упростить интеграцию с API-интерфейсом Android Wear.
В следующей части мы познакомимся с новейшей сборкой Android Studio Canary, в которой будут представлены новейшие функции Android 3.0.
А пока ознакомьтесь с другими нашими уроками и видео-курсами по разработке приложений для Android!