page.title=Creating Custom Layouts page.tags=wear helpoutsWidget=true @jd:body

This lesson teaches you to

  1. Create custom notifications
  2. Create Layouts with the Wearable UI Library

You should also read

Creating layouts for wearables is the same as handheld devices, except you have to design for the screen size and for glanceability. Do not port functionality and the UI from a handheld app and expect a good experience. You should create custom layouts only when necessary. Read the design guidelines for information on how to design great wearable apps.

Create Custom Notifications

In general, you should create notifications on the handheld and let them automatically sync to the wearable. This lets you build your notifications once and have them appear on many types of devices (not just wearables, but eventually Auto and TV) without having to design them for different form factors.

If the standard notification styles don't work for you (such as {@link android.support.v4.app.NotificationCompat.BigTextStyle} or {@link android.support.v4.app.NotificationCompat.InboxStyle}), you can display an activity with a custom layout. You can only create and issue custom notifications on the wearable, and the system does not sync these notifications to the handheld.

Note: When creating custom notifications on the wearable, you can use the standard notification APIs (API Level 20) instead of the Support Library.

To create a custom notification:

  1. Create a layout and set it as the content view for the activity that you want to display.
    public void onCreate(Bundle bundle){
        ...
        setContentView(R.layout.notification_activity);
    }
    
  2. Define necessary properties for the activity in the Android manifest to allow the activity to be displayed in the wearable's context stream process. You need to declare the activity to be exportable, be embeddable, and have an empty task affinity. We also recommend setting the theme to Theme.DeviceDefault.Light. For example:
  3. <activity android:name="com.example.MyDisplayActivity"
         android:exported="true"
         android:allowEmbedded="true"
         android:taskAffinity=""
         android:theme="@android:style/Theme.DeviceDefault.Light" />
    
  4. Create a {@link android.app.PendingIntent} for the activity that you want to display. For example:
    Intent notificationIntent = new Intent(this, NotificationActivity.class);
    PendingIntent notificationPendingIntent = PendingIntent.getActivity(
            this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    
  5. Build a {@link android.app.Notification} and call {@link android.app.Notification.WearableExtender#setDisplayIntent setDisplayIntent()} providing the {@link android.app.PendingIntent}. The system uses this {@link android.app.PendingIntent} to launch the activity when users view your notification.
  6. Issue the notification using the notify() method.

    Note: When the notification is peeking on the homescreen, the system displays it with a standard template that it generates from the notification's semantic data. This template works well on all watchfaces. When users swipe the notification up, they'll then see the custom activity for the notification.

Create Layouts with the Wearable UI Library

The Wearable UI Library is automatically included when you create your wearable app with the Android Studio Project Wizard. You can also add this library to your build.gradle file with the following dependency declaration:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.google.android.support:wearable:+'
    compile 'com.google.android.gms:play-services-wearable:+'
}

This library helps you build UIs that are designed for wearables. For more information, see Creating Custom UIs for Wear Devices.

Here are some of the major classes in the Wearable UI Library:

BoxInsetLayout
A {@link android.widget.FrameLayout} object that's aware of screen shape and can box its children in the center square of a round screen.
CardFragment
A fragment that presents content within an expandable, vertically scrollable card.
CircledImageView
An image view surrounded by a circle.
ConfirmationActivity
An activity that displays confirmation animations after the user completes an action.
CrossFadeDrawable
A drawable that contains two child drawables and provides methods to directly adjust the blend between the two.
DelayedConfirmationView
A view that provides a circular countdown timer, typically used to automatically confirm an operation after a short delay has elapsed.
DismissOverlayView
A view for implementing long-press-to-dismiss.
GridViewPager
A layout manager that allows the user to navigate both vertically and horizontally through pages of data. You supply an implementation of a GridPagerAdapter instance to generate the pages that the view shows.
GridPagerAdapter
An adapter that supplies pages to a GridViewPager object.
FragmentGridPagerAdapter
An implementation of a GridPagerAdapter instance that represents each page as a fragment.
DotsPageIndicator
A page indicator for a GridViewPager implementation that identifies the current page in relation to all available pages on the current row.
WatchViewStub
A class that can inflate a specific layout, depending on the shape of the device's screen.
WearableListView
An alternative version of a {@link android.widget.ListView} object that is optimized for ease of use on small screen wearable devices. It displays a vertically scrollable list of items, and automatically snaps to the nearest item when the user stops scrolling.

Wear UI library API reference

The reference documentation explains how to use each UI widget in detail. Browse the Wear API reference documentation for the classes above.

Download the Wearable UI library for Eclipse ADT

If you are using the ADT plugin for Eclipse, download the Wearable UI library to include the Wearable UI library as a dependency in your project.

Note: We recommend Android Studio for Android Wear app development.