APL Pager
Pager
は、一連のコンポーネントを1つずつ表示します。通常、Pagerは、時系列に並べられたデータ項目を表示するために使用します。Pager
とSequenceとの違いは、Pager
が長い連続した形ではなくページ単位に分割して項目を表示する点です。
Pagerコンポーネントについて
Pager
は、一連のページとして表示されます。ページは水平方向または垂直方向に表示されます。
- 水平 – ページは、
layoutDirection
プロパティの値に応じて、左から右、または右から左の方向に表示されます。Pager
がユーザーのナビゲーションを許可するように設定されている場合、ユーザーはコンポーネントを左右にスワイプしてページを変更します。 - 垂直 – ページは上から下に並べて表示されます。
Pager
がユーザーのナビゲーションを許可するように設定されている場合、ユーザーはコンポーネントを上下にスワイプしてページを変更します。
デバイスにタッチパネルが搭載されていない場合、Pagerはキーボードの入力(左右の矢印キー/Tabキーまたは上下の矢印キー/Tabキー)に応じて移動します。
Pager
のページは、SetPage
コマンドを使用してプログラムによって変更できます。navigation
プロパティを使用して、ユーザーがページを変更できないようにPager
を設定することもできます。
Pager
は、Sequenceとは異なります。Sequence
は、連続した項目のリストとして表示されます。小型のスクリーンではゆっくりスワイプするとSequence
は1つの項目を表示しますが、Sequence
はコンテンツを速く進める高速スワイプモードにも対応しています。Sequence
の項目が小さい場合、Sequence
は「高速スクロールモード」で小さいバージョンのコンテンツを複数表示できます。 個々の項目は隣り合って表示されます。一方、Pagerでは、前後のページのいずれかの方向に少しスワイプするだけで、それまで見ていたページから新しいページへとコンテンツが切り替わります。
プロパティ
Pagerコンポーネントには、次のプロパティがあります。
- すべてのアクション可能なコンポーネントのプロパティ
- すべての複数子コンポーネントのプロパティ
- すべての基本コンポーネントのプロパティ
- 次の表は、
Pager
プロパティの一覧です。列の意味はこちらを参照してください。
プロパティ | 型 | デフォルト | スタイル設定 | 動的 | 説明 |
---|---|---|---|---|---|
|
ページ移動ハンドラーの配列 |
|
✕ |
✕ |
|
|
整数 |
0 |
✕ |
✕ |
最初のページの(0から始まる)インデックスです。デフォルトは0です。 |
|
|
|
✕ |
◯ |
移動可能な方向を指定します。 |
|
コマンド配列 |
|
✕ |
✕ |
ページを切り替える場合に実行するコマンドです。 |
|
|
horizontal |
✕ |
◯ |
ページ移動の方向です。 |
|
文字列の配列 |
[] |
✕ |
✕ |
|
Pager
がソースまたはイベントのターゲットである場合、event.source
またはevent.target
に次の値が報告されます。
{
// Pager固有の値
"type": "Pager",
"page": Integer, // 現在のページです
// 一般的なコンポーネントの値
"bind": Map, // コンポーネントのデータバインディングコンテキストへのアクセス
"checked": Boolean, // チェックの状態
"disabled": Boolean, // 無効化の状態
"focused": Boolean, // フィーカス状態
"height": Number, // コンポーネントのdp単位の高さ(パディングを含む)
"id": ID, // コンポーネントのID
"opacity": Number, // コンポーネントの不透明度[0~1]
"pressed": Boolean, // 押された状態
"uid": UID, // ランタイムで生成されたコンポーネントの固有ID
"width": Number // コンポーネントのdp単位の幅(パディングを含む)
}
heightおよびwidth
指定されない場合、Pager
コンポーネントのheight
とwidth
のデフォルトは100dpです。Pagerのheight
とwidth
は、絶対ディメンションまたは相対ディメンションのいずれかである必要があります。auto
は使用できません。
Pager
の子のheight
とwidth
は常に100%
です。つまり、Pager
の子項目は常にPager
自体と同じサイズになります。
layoutDirectionコンポーネントプロパティ
コンポーネントのlayoutDirection
プロパティは、pageDirection
プロパティがhorizontal
(水平)の場合にページの順序を決定します。
- 左から右(LTR) -
Pager
はページを左から右に並べます。ユーザーが右から左へスワイプすると、次のページに進みます。 - 右から左(RTL) -
Pager
はページを右から左に並べます。ユーザーが左から右にスワイプすると、次のページに進みます。
layoutDirection
プロパティは、handlePageMove
ハンドラーの動作方法も決定します。詳細と例については、handlePageMove
を参照してください。
handlePageMove
ページ移動ハンドラーの配列を指定します。これらのハンドラーは、Pager
が次のページに移動すると実行されます。handlePageMove
に値が含まれる場合、ハンドラーは通常のページ変更動作の表示を上書きします。
handlePageMove
ハンドラーによって生成されるイベントは、次のような形式になります。
"event": {
"source": {
"type": "Pager",
"handler": "Move",
... // コンポーネントのソースプロパティ
},
"direction": STRING, // 動きの方向。 'left'、'right'、'up'、'down'のいずれかになります。
"forward": BOOLEAN, // ページャーが先に進む場合はtrue。
"amount": NUMBER, // 0~1の間の数値です。
"currentChild": { // 現在画面に表示されているコンポーネントのプロパティ
"id": ID,
"uid": UID
},
"nextChild": { // 画面に移動されるコンポーネントのプロパティ
"id": ID,
"uid": UID
}
}
event.source
の詳細についてはイベントソースを参照してください。
handlePageMove
イベントハンドラーは高速モードで実行されます。
イベントのdirection
プロパティは、ジェスチャーの動きの方向を表します。direction
の意味は、layoutDirection
プロパティによって異なります。
- 左から右(LTR) -
direction
の値にleft
またはup
を指定すると、現在のページからページリストの次のページに移動します。direction
の値にright
またはdown
を指定すると、現在のページからページリストの前のページに移動します。 - 右から左(RTL) -
direction
の値にright
またはup
を指定すると、現在のページからページリストの次のページに移動します。direction
の値にleft
またはdown
を指定すると、現在のページからページリストの前のページに移動します。
ページ間を遷移するカスタムアニメーションを作成する場合、アニメーションがジェスチャーの動きと一致する必要はありません。
amount
フィールドは、ジェスチャーで移動する距離です。amount
が0の場合、現在のページがすべて画面に表示され、次のページが表示されないことを意味します。amount
が1の場合、現在のページが完全に削除され、次のページが適切に画面内に配置されることを意味します。ユーザーのジェスチャーに一致するアニメーションを作成するには、amount
の値をopacity
やtransform
などのプロパティに設定します。
単一のページ移動ハンドラーは、以下の表のプロパティを持つオブジェクトです。
プロパティ | 型 | デフォルト | 説明 |
---|---|---|---|
|
コマンド配列 |
|
|
|
文字列 |
"" |
ハンドラーの任意の説明です。 |
|
|
|
ページのスタック順序です。 |
|
ブール値 |
|
|
Alexaは、移動ハンドラーの配列を順番にチェックし、when
句がtrueの最初の移動ハンドラーを呼び出します。ハンドラーを呼び出すと、そのハンドラーに定義されたcommands
が実行されます。when
句がtrueの移動ハンドラーがない場合、Alexaはシステムのデフォルト移動ハンドラーを実行します。
drawOrder
プロパティは、遷移中に一番上に表示するページを制御します。このプロパティは、カスタム遷移でページがオーバーラップする場合に使用します。以下の表は、特定の移動方向とdrawOrder
でどのページが一番上に表示されるか(「現在」または「次」)を示しています。
移動の方向 | nextAbove | nextBelow | higherAbove | higherBelow |
---|---|---|---|---|
リスト内で次に進む
|
次 |
現在 |
次 |
現在 |
リスト内で前に戻る
|
次 |
現在 |
現在 |
次 |
ハンドラーの呼び出し中、現在および次のコンポーネントのベース位置はPager
の境界に設定され、それぞれの不透明度は1
に設定されます。handlePageMove
ハンドラーは適切な変換と不透明度の変化を適用して、現在のページと次のページを視覚的に配置する必要があります。
以下の例は、標準的なPager動作をシミュレートしたものです。ページを切り替えると、現在のページがビューの外にスライドアウトし、新しいページがビュー内にスライドインします。
{
"handlePageMove": [
{
"when": "${event.direction == 'left' || event.direction == 'right'}",
"drawOrder": "higherAbove",
"commands": [
{
"type": "SetValue",
"componentId": "${event.currentChild.uid}",
"property": "transform",
"value": [
{
"translateX": "${100 ` event.amount ` (event.direction == 'left' ? -1 : 1)}%"
}
]
},
{
"type": "SetValue",
"componentId": "${event.nextChild.uid}",
"property": "transform",
"value": [
{
"translateX": "${100 ` (1.0 - event.amount) ` (event.direction == 'left' ? 1 : -1)}%"
}
]
}
]
}
]
}
カスタムのページ遷移アニメーションを作成する場合、次の点に注意してください。
event.direction
プロパティを使用して、ユーザーがPagerをドラッグした方向を判断します。drawOrder
を設定してほかのページの上または下にページを配置します。ページがオーバーラップしない場合、このプロパティは無視して構いません。SetValue
を呼び出し、event.amount
の現在の値に基づいて使用する各視覚プロパティを変更します。たとえば、opacity
を変更してページのフェードインとフェードアウトを行ったり、transform
を変更してページを画面の内外にスライド移動させたりします。- ページ移動の最後に視覚値が適切に設定されることを確認します。
- すべてが表示されるように、
event.nextChild
のopacityを1
に設定する必要があります。 event.nextChild
のtransform
プロパティをnormalに戻す必要があります。
- すべてが表示されるように、
以下は、opacity
とtransform
を使用するhandlePageMove
の例です。Pagerを進める場合、新しいページのtransform
プロパティが変更されるとページが右から画面内にスライドインします。古いページのtransform
およびopacity
プロパティが変更されると、新しいページが画面にスライドインするにつれて古いページの表示が縮小されます。デバッグのため、viewportの一番上のText
コンポーネントはevent.amount
の値を表示します。
handlePageMove
ハンドラーのコマンドは、Pagerが2つのページ間で遷移すると実行されます。以下のシナリオではコマンドは実行されません。
- Pagerにページがないか、1ページのみの場合。
navigation
プロパティがnone
で、ユーザーがページをドラッグしようとした場合。- ユーザーが
navigation
プロパティでサポートされていない方向にページをドラッグしようとした場合。たとえば、navigation
がforward-only
の場合、右や下にスワイプしてもページは切り替わりません。 - ユーザーが
pageDirection
に指定されていない方向にページをドラッグしようとした場合。たとえば、pageDirection
がhorizontal
の場合、上や下にスワイプしてもページは切り替わりません。
initialPage
表示する最初のページのインデックスです。インデックスは0から始まり、デフォルトは0です。firstItem
に値が設定されている場合、firstItem
項目のインデックスは0になります。
navigation
navigation
プロパティは、ユーザーがコンテンツ内を移動する方法を制御します。
normal
– ユーザーはPagerで前後に自由に移動することができます。none
– ユーザーはPagerを移動できません。コマンドを使用してプログラムでPagerを移動します。たとえば、AutoPage
コマンドやSetPage
コマンドを使用します。wrap
– ユーザーは前後に自由に移動することができます。ユーザーが最後のページでスワイプすると、Pagerは最初のページに戻ります。forward-only
– ユーザーは前には移動できますが、後ろには移動できません。
SetPage
コマンドとAutoPage
コマンドは常にPagerを移動できます。navigation
プロパティは、画面上のスワイプによるユーザー操作を制限します。
onPageChanged
onPageChanged
ハンドラーは、Pagerが新しいページに完全に切り替わったときに実行されます。生成されるイベントの形式は次のようになります。
"event": {
"source": {
"type": "Pager",
"handler": "Page",
... // コンポーネントのソースプロパティ
}
}
event.source
の詳細についてはイベントソースを参照してください。event.source.value
プロパティは、新しいページのインデックス(0から始まるインデックス)を含みます。
pageDirection
ページが切り替わるときのアニメーションの方向を決定します。pageDirection
は、ユーザーが画面をスワイプしてPagerを操作する方向も決定します。
pageDirection
には、horizontal
、vertical
のいずれかを指定できます。
horizontal
– (デフォルト)ユーザーは左か右にスワイプしてページを操作します。左にスワイプすると、インデックスの大きいページに進みます。右にスワイプすると、インデックスの小さいページに戻ります。デフォルトのアニメーションは、ページを左か右にスライドしてページを切り替えます。vertical
– ユーザーは上か下にスワイプしてページを操作します。上にスワイプすると、インデックスの大きいページに進みます。下にスワイプすると、インデックスの小さいページに戻ります。デフォルトのページ切り替えアニメーションは、ページを上か下にスライドしてページを切り替えます。
preserve
Reinflate
コマンドを使ってドキュメントを再インフレートする際に保存する動的なコンポーネントプロパティと、バインドされるプロパティの配列です。
Pager
には以下のコンポーネント固有のプロパティ名があり、これらをpreserve
配列に割り当てることができます。
pageId
– 開始ページを現在のページのIDと一致するよう設定します。pageIndex
– 開始ページを現在のページのインデックスに設定します。
これらの値がいずれも指定されていない場合、ドキュメント再インフレート後の開始ページはinitialPage
になります。
preserve
をpageId
に設定したにもかかわらず、Pagerの現在表示されているページにid
が設定されていない場合、ドキュメント再インフレート後の開始ページはinitialPage
になります。同様に、指定されたpageIndex
が存在しない場合(ページ数が変更された場合など)、initialPage
インデックスが使用されます。
以下の例では、ドキュメントの再インフレート後にPager
の現在のページを復元しています。
{
"type": "Pager",
"id": "MyPager",
"preserve": ["pageIndex"]
}
アクション可能なプロパティ
Pagerは、アクション可能なコンポーネントです。Pagerは、すべてのアクション可能なプロパティを継承します。
複数子プロパティ
Pagerは、複数子コンポーネントです。Pagerは、すべての複数子プロパティを継承します。
Pagerのサンプル
{
"type": "Pager",
"items": [
{
"type": "Text",
"text": "ページ#1で表示されるテキストコンテンツ"
},
{
"type": "Text",
"text": "ページ#2で表示されるテキストコンテンツ"
}
]
}
最終更新日: 2022 年 06 月 30 日