Статьи

Google I / O 2017 Последствия: что нового для Android Wear?

В этой серии советов мы более подробно рассмотрели некоторые новые функции и инструменты Android, анонсированные в этом году на Google I / O.

В этом посте мы сосредоточимся на Android Wear.

Google уже некоторое время предоставляет компоненты пользовательского интерфейса Android Wear через выделенную библиотеку поддержки носимых устройств, но это все изменится!

В этом году Google объявил, что различные компоненты, входящие в состав библиотеки поддержки носимых устройств, будут объявлены устаревшими, объединены или перенесены в библиотеку поддержки Android. В этой статье мы рассмотрим, какие компоненты будут объединены, перемещены и удалены, и как вы можете начать использовать новый модуль Wear для библиотеки поддержки Android сегодня .

Мы также рассмотрим некоторые новые инструменты, разработанные для облегчения работы с API-интерфейсом «Сложности» в Android Wear.

В этом году на 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 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;

Пользователи Android Wear могут выбирать из огромного разнообразия стилей циферблатов, и хотя API-интерфейс «Осложнения» дает сторожам полный контроль над тем, как они рисуют эти данные, эта гибкость может затруднить добавление поддержки сложностей на циферблаты.

В этом году на Google I / O команда Android Wear представила некоторые дополнения, которые должны упростить работу с API-интерфейсом Complication.

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 затем изменит размер текста или расположит его по нескольким строкам, чтобы соответствовать этой области. Кроме того, когда экран переходит в режим «Всегда включен» в 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!

  • Android
    Создать голосовое приложение для Android
    Ашраф Хатхибелагал
  • Android SDK
    Бессерверные приложения с облачными функциями Firebase
    Чике Мгбемена
  • Android SDK
    Оперативное программирование операторов в RxJava 2