Статьи

Совет: знакомство с адаптивными иконками и закрепленными ярлыками в Android O

В этой серии быстрых советов мы рассмотрели некоторые предстоящие изменения пользовательского интерфейса, с которыми вы можете начать работать сегодня, с помощью Android O Developer Preview.

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

С выпуском Android O производители оригинального оборудования, такие как HTC и Samsung, получат возможность предоставить маску, которую система будет применять ко всем значкам запуска приложений. Маски гарантируют, что все значки, которые появляются на этом устройстве, имеют одинаковую форму: если OEM-производитель предоставляет круговую маску, то все значки запуска приложений будут круглыми, а если он предоставляет маску с закругленными углами (или «сквид»), то все значки будут иметь закругленные углы.

Эти адаптивные значки предназначены для обеспечения более единообразного внешнего вида на панели запуска устройства и в других областях, где значки панели запуска выделяются, например, в настройках вашего устройства и в диалоговых окнах общего доступа.

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

Прежде чем начать, убедитесь, что атрибут android:icon вашего манифеста указывает на изображение, которое вы хотите использовать в качестве значка панели запуска:

1
2
3
4
5
6
<application
 android:label=»@string/app_name»
 android:allowBackup=»true»
 android:icon=»@mipmap/ic_launcher»
 android:supportsRtl=»true»
 android:theme=»@style/AppTheme»>

Каждый адаптивный значок состоит из фонового слоя, слоя переднего плана и маски. Последний предоставляется OEM, но вам нужно будет предоставить фон и слои переднего плана. Для достижения наилучших результатов эти слои должны быть PNG без каких-либо масок или фоновых теней. Оба слоя должны иметь разрешение 108×108 точек на дюйм, но внутреннее 72×72 точки на дюйм — это содержимое, которое будет отображаться в замаскированном окне просмотра, поскольку система резервирует внешние 36 точек на дюйм вокруг значка для визуальных эффектов, таких как пульсация или параллакс.

Создайте фоновый и передний слои, а затем добавьте их в свой проект. Затем создайте файл res / mipmap-anydpi / ic_launcher.xml и используйте его для ссылки на два рисованных объекта, которые вы хотите использовать в качестве фонового и переднего слоев, например:

1
2
3
4
5
<?xml version=»1.0″ encoding=»utf-8″?>
 http://schemas.android.com/apk/res/android»>
     <foreground android:drawable=»@mipmap/ic_foreground»/>
     <background android:drawable=»@mipmap/ic_background»/>
 </adaptive-icon>
Test your adaptive icons across various Android O AVDs

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

Создайте этот круглый значок, добавьте его в свой проект, а затем назовите эту версию своего значка в манифесте своего проекта, используя атрибут android:roundIcon .

1
2
3
4
5
6
7
<application
 android:label=»@string/app_name»
 android:allowBackup=»true»
 android:icon=»@mipmap/ic_launcher»
 android:roundIcon=»@mipmap/ic_launcher_round»
 android:supportsRtl=»true»
 android:theme=»@style/AppTheme»>

Некоторые устройства под управлением Android позволяют пользователям прикреплять ярлыки приложений к своим средствам запуска. Эти ярлыки отображаются в виде отдельных значков, которые пользователь запускает нажатием, точно так же, как они взаимодействуют с обычными значками запуска приложений.

Каждый ярлык приложения будет ссылаться на одно или несколько Intents, каждое из которых запускает определенное действие в вашем приложении. Это делает закрепленные ярлыки отличным способом, позволяющим пользователям переходить к наиболее важным задачам и контенту вашего приложения прямо с рабочего стола. Например, вы можете создать ярлык, который приведет пользователя к последней точке сохранения в вашем игровом приложении или к его наиболее часто используемому контакту.

Количество закрепленных ярлыков, которые вы можете предложить, не ограничено, хотя для обеспечения того, чтобы ваше приложение не захватывало панель запуска пользователя, рекомендуется, чтобы вы предлагали только четыре ярлыка одновременно.

Чтобы предложить один или несколько закрепленных ярлыков, сначала необходимо создать экземпляр ShortcutManager :

1
2
ShortcutManager myShortcutManager =
      context.getSystemService(ShortcutManager.class);

Затем убедитесь, что устройство пользователя действительно поддерживает закрепленные ярлыки:

1
if (mShortcutManager.isRequestPinShortcutSupported()) {

Это возвращает TRUE если requestPinShortcut запуска по умолчанию поддерживает requestPinShortcut .

Предполагая, что устройство поддерживает ярлыки в приложении, можно затем создать объект ShortcutInfo который содержит идентификатор, намерение и метку для этого конкретного ярлыка.

1
2
3
4
5
6
7
ShortcutInfo pinShortcutInfo = ShortcutInfo.Builder(context, «my-shortcut»);
 .setShortLabel(getString(R.string.shortcut_label))
 .setLongLabel(getString(R.string.shortcut_long_label))
 .setIcon(Icon.createWithResource(context, R.mipmap.ic_launcher))
 .setIntent(new Intent(Intent.ACTION_VIEW,
                 Uri.parse(«https://www.google.com»)))
  .build();

Наконец, вы requestPinShortcut() ярлык, вызывая requestPinShortcut() . requestPinShortcut() запуска по умолчанию получит этот запрос, а затем попросит пользователя утвердить или отклонить операцию закрепления. Если ваше приложение должно знать, была ли операция закрепления успешной, на этом этапе вы также можете создать объект PendingIntent .

1
2
3
4
5
6
7
8
//Here, we’re assuming that our project already includes a createShortcutResultIntent() method, which will return the broadcast intent//
Intent pinnedShortcutCallbackIntent =
           createShortcutResultIntent(pinShortcutInfo);
 
PendingIntent successCallback = PendingIntent.createBroadcast(context, 0,
           pinnedShortcutCallbackIntent);
mShortcutManager.requestPinShortcut(pinShortcutInfo,
           successCallback.getIntentSender());

Этот PendingIntent будет отправлять resultIntent если операция закрепления прошла успешно. Ваше приложение не получит уведомление, если операция не удалась.

После того, как пин-код был создан, вы можете обновить его содержимое с помощью updateShortcuts() . Просто помните, что закрепленный контент или действия обычно имеют срок годности. В нашем игровом примере пользователь может дойти до конца игры или удалить свой файл сохранения, после чего на закрепленном ярлыке не будет отображаться никакого контента.

Хотя соблазнительно перезаписать закрепленный ярлык, изменив его первоначальное назначение, для пользователя это гораздо менее смущает, если вы отключите ярлыки, которые больше не нужны. Если закрепленный ярлык подходит к концу, его можно отключить, вызвав disableShortcuts() .

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

Пока вы здесь, ознакомьтесь с некоторыми другими нашими публикациями по разработке приложений для Android!

  • Android SDK
    Приложения RxJava 2 для Android: RxBinding и RxLifecycle
  • Android
    Введение в Android вещи
    Пол Требилкокс-Руис
  • Android SDK
    Java против Kotlin: стоит ли использовать Kotlin для разработки под Android?
  • Android SDK
    Отправка данных с помощью HTTP-клиента Retrofit 2 для Android
    Чике Мгбемена