Wear OS でリストを作成する
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
Compose の方法を試す
Wear OS では、Wear OS 向け Jetpack Compose が推奨される UI ツールキットです。
リストを使用すると、Wear OS デバイス上でユーザーが選択肢の中から簡単にアイテムを選択できるようになります。
ウェアラブル UI ライブラリには、ウェアラブル デバイス向けに最適化されたリストを作成するための RecyclerView
の実装である WearableRecyclerView
クラスが用意されています。ウェアラブル アプリでこのインターフェースを使用するには、新しい WearableRecyclerView
コンテナを作成します。
単純なアイテム(アプリ ランチャーなど)の長いリストや連絡先リストには WearableRecyclerView
を使用します。各アイテムには、短い文字列と、関連付けられているアイコンを表示できます。また、各アイテムに文字列とアイコンのどちらかしか表示できないこともあります。
注: 複雑なレイアウトは避けてください。特にウェアラブルは画面サイズが限られているため、ユーザーが一瞥しただけでどのようなアイテムなのかを理解できるようにする必要があります。
既存の RecyclerView
クラスを拡張することにより、WearableRecyclerView
API ではデフォルトで、縦スクロールできるアイテムリストが直線状に表示されます。WearableRecyclerView
API を使用すると、ウェアラブル アプリで曲線レイアウトと円形スクロール操作を有効にすることもできます。
図 1. Wear OS のデフォルトのリスト表示
このガイドでは、WearableRecyclerView
クラスを使用して Wear OS アプリにリストを作成する方法、スクロール可能なアイテムの曲線レイアウトを有効にする方法、スクロール時の子の表示をカスタマイズする方法について説明します。
XML を使用して WearableRecyclerView をアクティビティに追加する
次のレイアウトでは、アクティビティに WearableRecyclerView
を追加します。
<androidx.wear.widget.WearableRecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/recycler_launcher_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical" />
次に、アクティビティに適用する WearableRecyclerView
の例を示します。
Kotlin
class MainActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
...
}
Java
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
...
}
曲線レイアウトを作成する
ウェアラブル アプリにスクロール可能なアイテムの曲線レイアウトを作成する手順は次のとおりです。
Kotlin
wearableRecyclerView.apply {
// To align the edge children (first and last) with the center of the screen.
isEdgeItemsCenteringEnabled = true
...
layoutManager = WearableLinearLayoutManager(this@MainActivity)
}
Java
// To align the edge children (first and last) with the center of the screen.
wearableRecyclerView.setEdgeItemsCenteringEnabled(true);
...
wearableRecyclerView.setLayoutManager(
new WearableLinearLayoutManager(this));
スクロール時の子の表示に関して具体的なカスタマイズ要件がある場合(たとえば、アイテムがスクロールされて中央から離れるときにアイコンとテキストのサイズを変更する場合)は、
WearableLinearLayoutManager.LayoutCallback
クラスを拡張して
onLayoutFinished
メソッドをオーバーライドします。
次のコード スニペットは、WearableLinearLayoutManager.LayoutCallback
クラスを拡張することで、中央から離れるにつれサイズが変更されるようにアイテムのスクロールをカスタマイズする例を示しています。
Kotlin
/** How much icons should scale, at most. */
private const val MAX_ICON_PROGRESS = 0.65f
class CustomScrollingLayoutCallback : WearableLinearLayoutManager.LayoutCallback() {
private var progressToCenter: Float = 0f
override fun onLayoutFinished(child: View, parent: RecyclerView) {
child.apply {
// Figure out % progress from top to bottom.
val centerOffset = height.toFloat() / 2.0f / parent.height.toFloat()
val yRelativeToCenterOffset = y / parent.height + centerOffset
// Normalize for center.
progressToCenter = Math.abs(0.5f - yRelativeToCenterOffset)
// Adjust to the maximum scale.
progressToCenter = Math.min(progressToCenter, MAX_ICON_PROGRESS)
scaleX = 1 - progressToCenter
scaleY = 1 - progressToCenter
}
}
}
Java
public class CustomScrollingLayoutCallback extends WearableLinearLayoutManager.LayoutCallback {
/** How much icons should scale, at most. */
private static final float MAX_ICON_PROGRESS = 0.65f;
private float progressToCenter;
@Override
public void onLayoutFinished(View child, RecyclerView parent) {
// Figure out % progress from top to bottom.
float centerOffset = ((float) child.getHeight() / 2.0f) / (float) parent.getHeight();
float yRelativeToCenterOffset = (child.getY() / parent.getHeight()) + centerOffset;
// Normalize for center.
progressToCenter = Math.abs(0.5f - yRelativeToCenterOffset);
// Adjust to the maximum scale.
progressToCenter = Math.min(progressToCenter, MAX_ICON_PROGRESS);
child.setScaleX(1 - progressToCenter);
child.setScaleY(1 - progressToCenter);
}
}
Kotlin
wearableRecyclerView.layoutManager =
WearableLinearLayoutManager(this, CustomScrollingLayoutCallback())
Java
CustomScrollingLayoutCallback customScrollingLayoutCallback =
new CustomScrollingLayoutCallback();
wearableRecyclerView.setLayoutManager(
new WearableLinearLayoutManager(this, customScrollingLayoutCallback));
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-07-26 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-07-26 UTC。"],[],[],null,["# Create lists on Wear OS\n\nTry the Compose way \nJetpack Compose on Wear OS is the recommended UI toolkit for Wear OS. \n[Create lists using Compose on Wear OS →](/training/wearables/compose/lists) \n\n\nLists let users select an item from a set of choices easily on Wear OS devices.\n\n\nThe Wearable UI Library includes the\n[`WearableRecyclerView`](/reference/androidx/wear/widget/WearableRecyclerView) class, which is a\n[`RecyclerView`](/reference/androidx/recyclerview/widget/RecyclerView)\nimplementation for creating lists optimized for wearable devices. You can use this\ninterface in your wearable app by creating a new `WearableRecyclerView` container.\n\n\nUse a `WearableRecyclerView` for a\nlong list of simple items, such as an application launcher or a list of contacts. Each item might\nhave a short string and an associated icon. Alternatively, each item might have only a string\nor an icon.\n\n\n**Note:** Avoid complex layouts. Users should only need to glance at an item to\nunderstand what it is, especially with wearables' limited screen size.\n\n\nBy extending the existing `RecyclerView` class, `WearableRecyclerView`\nAPIs display a vertically scrollable list of items in a straight list by default. You can also use\nthe `WearableRecyclerView` APIs to opt-in for a curved layout and\na [circular scrolling gesture](/reference/androidx/wear/widget/WearableRecyclerView#setCircularScrollingGestureEnabled(boolean))\nin your wearable apps.\n\n**Figure 1.**\nDefault list view on Wear OS.\n\n\nThis guide shows you how to use the `WearableRecyclerView` class to create\nlists in your Wear OS apps, how to opt-in for a curved layout\nfor your scrollable items, and how to customize the appearance of\nthe children while scrolling.\n\nAdd WearableRecyclerView to an activity using XML\n-------------------------------------------------\n\n\nThe following layout adds a `WearableRecyclerView` to an activity: \n\n```xml\n\u003candroidx.wear.widget.WearableRecyclerView\n xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/tools\"\n android:id=\"@+id/recycler_launcher_view\"\n android:layout_width=\"match_parent\"\n android:layout_height=\"match_parent\"\n android:scrollbars=\"vertical\" /\u003e\n```\n\n\nThe following example shows the `WearableRecyclerView`\napplied to an activity: \n\n### Kotlin\n\n```kotlin\nclass MainActivity : Activity() {\n\n override fun onCreate(savedInstanceState: Bundle?) {\n super.onCreate(savedInstanceState)\n setContentView(R.layout.activity_main)\n }\n ...\n}\n```\n\n### Java\n\n```java\npublic class MainActivity extends Activity {\n @Override\n public void onCreate(Bundle savedInstanceState) {\n super.onCreate(savedInstanceState);\n setContentView(R.layout.activity_main);\n }\n ...\n}\n```\n\nCreate a curved layout\n----------------------\n\n\nTo create a curved layout for scrollable items in your wearable app, do the following:\n\n- Use [`WearableRecyclerView`](/reference/androidx/wear/widget/WearableRecyclerView) as your main container in the relevant XML layout.\n- Set the [`setEdgeItemsCenteringEnabled(boolean)`](/reference/androidx/wear/widget/WearableRecyclerView#setEdgeItemsCenteringEnabled(boolean)) method to `true`. This vertically centers the first and last items on the list on the screen.\n- Use the `WearableRecyclerView.setLayoutManager()` method to set the layout of the items on the screen.\n\n### Kotlin\n\n```kotlin\nwearableRecyclerView.apply {\n // To align the edge children (first and last) with the center of the screen.\n isEdgeItemsCenteringEnabled = true\n ...\n layoutManager = WearableLinearLayoutManager(this@MainActivity)\n}\n```\n\n### Java\n\n```java\n// To align the edge children (first and last) with the center of the screen.\nwearableRecyclerView.setEdgeItemsCenteringEnabled(true);\n...\nwearableRecyclerView.setLayoutManager(\n new WearableLinearLayoutManager(this));\n```\n\n\nIf your app has specific requirements to customize the appearance of the children while scrolling---for example,\nscaling the icons and text while the items scroll away from the center---extend\nthe [`WearableLinearLayoutManager.LayoutCallback`](/reference/androidx/wear/widget/WearableLinearLayoutManager.LayoutCallback) class and override the\n[`onLayoutFinished`](/reference/androidx/wear/widget/WearableLinearLayoutManager.LayoutCallback#onLayoutFinished(android.view.View, androidx.recyclerview.widget.RecyclerView)) method.\n\n\nThe following code snippets show an example of customizing the scrolling of items to scale\nfarther away from the center by extending the\n`WearableLinearLayoutManager.LayoutCallback` class: \n\n### Kotlin\n\n```kotlin\n/** How much icons should scale, at most. */\nprivate const val MAX_ICON_PROGRESS = 0.65f\n\nclass CustomScrollingLayoutCallback : WearableLinearLayoutManager.LayoutCallback() {\n\n private var progressToCenter: Float = 0f\n\n override fun onLayoutFinished(child: View, parent: RecyclerView) {\n child.apply {\n // Figure out % progress from top to bottom.\n val centerOffset = height.toFloat() / 2.0f / parent.height.toFloat()\n val yRelativeToCenterOffset = y / parent.height + centerOffset\n\n // Normalize for center.\n progressToCenter = Math.abs(0.5f - yRelativeToCenterOffset)\n // Adjust to the maximum scale.\n progressToCenter = Math.min(progressToCenter, MAX_ICON_PROGRESS)\n\n scaleX = 1 - progressToCenter\n scaleY = 1 - progressToCenter\n }\n }\n}\n```\n\n### Java\n\n```java\npublic class CustomScrollingLayoutCallback extends WearableLinearLayoutManager.LayoutCallback {\n /** How much icons should scale, at most. */\n private static final float MAX_ICON_PROGRESS = 0.65f;\n\n private float progressToCenter;\n\n @Override\n public void onLayoutFinished(View child, RecyclerView parent) {\n\n // Figure out % progress from top to bottom.\n float centerOffset = ((float) child.getHeight() / 2.0f) / (float) parent.getHeight();\n float yRelativeToCenterOffset = (child.getY() / parent.getHeight()) + centerOffset;\n\n // Normalize for center.\n progressToCenter = Math.abs(0.5f - yRelativeToCenterOffset);\n // Adjust to the maximum scale.\n progressToCenter = Math.min(progressToCenter, MAX_ICON_PROGRESS);\n\n child.setScaleX(1 - progressToCenter);\n child.setScaleY(1 - progressToCenter);\n }\n}\n``` \n\n### Kotlin\n\n```kotlin\nwearableRecyclerView.layoutManager =\n WearableLinearLayoutManager(this, CustomScrollingLayoutCallback())\n```\n\n### Java\n\n```java\nCustomScrollingLayoutCallback customScrollingLayoutCallback =\n new CustomScrollingLayoutCallback();\nwearableRecyclerView.setLayoutManager(\n new WearableLinearLayoutManager(this, customScrollingLayoutCallback));\n```"]]