部分 Wear OS 裝置包含實體「側邊旋轉按鈕」。使用者轉動按鈕時,會向上或向下捲動應用程式目前的檢視畫面。這種輸入類型稱為「旋轉輸入」。
如果這些容器聚焦的話,許多可捲動的容器 (例如 ScrollView
、ListView
、HorizontalScrollView
和 WearableRecyclerView
) 支援旋轉輸入,且不需要任何 Wear OS-特定程式碼。有聚焦是一項重要的先決條件,因為在 Android 9 (API 級別 28) 以上版本中,檢視畫面不會間接接收焦點。
聚焦最佳做法
為回應旋轉輸入事件,可捲動的容器必須聚焦。輪替輸入事件不會彈出檢視區塊階層。如果沒有聚焦檢視畫面,或如果聚焦的檢視畫面從 View.onGenericMotionEvent()
傳回 false
,則事件會傳送至 Activity.onGenericMotionEvent()
。
以下是回應旋轉輸入事件的最佳做法:
- 請注意,根據預設,即便是可聚焦的活動,即使啟動或輕觸檢視畫面,也不會聚焦。如要聚焦檢視畫面,檢視畫面必須使用
<requestFocus />
標記,或手動呼叫View.requestFocus()
。 - 使用
android:focusable="true"
和android:focusableInTouchMode="true"
,將自訂可捲動檢視畫面標示為可聚焦。 - 如果在
Activity.onCreate()
之後附加了可捲動的檢視畫面 (例如在建構 UI 之前等待網路要求完成),請在附加後呼叫requestFocus()
。 - 若可捲動檢視畫面的初始畫面為
INVISIBLE
或GONE
,請在初始畫面設定成VISIBLE
時呼叫requestFocus()
。 - 如果您的活動包含多個可捲動的檢視畫面,請使用
<requestFocus />
標記選擇要聚焦的檢視畫面。側邊旋轉按鈕不支援巢狀捲動功能。 - 如果您的 UI 包含其他檢視畫面,當使用者與其互動時 (例如
InputText
),系統會聚焦這些檢視畫面,請在使用者遺失焦點時,透過監聽可捲動檢視畫面上的輕觸操作,並呼叫requestFocus()
進行回應,來將其還原為可捲動的檢視畫面。
自訂旋轉行為
如果可捲動檢視畫面未有旋轉輸入捲動功能的原生支援,或是您想使用旋轉輸入項目來執行捲動畫面以外的內容 (例如放大/縮小或轉盤),您可以自行操控捲動事件。務必確保您的檢視畫面具有焦點,否則事件將無法通過。
下列程式碼片段說明如何使用 MotionEvent
、InputDeviceCompat
和 ViewConfigurationCompat
,以在檢視畫面中新增自訂捲動功能:
Kotlin
myView.setOnGenericMotionListener { v, ev -> if (ev.action == MotionEvent.ACTION_SCROLL && ev.isFromSource(InputDeviceCompat.SOURCE_ROTARY_ENCODER) ) { // Don't forget the negation here val delta = -ev.getAxisValue(MotionEventCompat.AXIS_SCROLL) * ViewConfigurationCompat.getScaledVerticalScrollFactor( ViewConfiguration.get(context), context ) // Swap these axes to scroll horizontally instead v.scrollBy(0, delta.roundToInt()) true } else { false } }
Java
myView.setOnGenericMotionListener(new View.OnGenericMotionListener() { @Override public boolean onGenericMotion(View v, MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_SCROLL && ev.isFromSource(InputDeviceCompat.SOURCE_ROTARY_ENCODER) ) { // Don't forget the negation here float delta = -ev.getAxisValue(MotionEventCompat.AXIS_SCROLL) * ViewConfigurationCompat.getScaledVerticalScrollFactor( ViewConfiguration.get(context), context ); // Swap these axes to scroll horizontally instead v.scrollBy(0, Math.round(delta)); return true; } return false; } });
使用模擬器進行測試
使用 Android 模擬器模擬 Wear 裝置的旋轉輸入捲動功能。在模擬器上啟動 Wear 應用程式以執行專案,或是將 APK 檔案拖曳至模擬器上以便安裝。
如何在模擬器上測試旋轉輸入功能:
- 在 SDK Manager 中使用「SDK tools」分頁取得 Android 模擬器 26.0.3 以上版本。
- 在 Android Studio 中,依序選取「Tools」>「Android」>「Android」。使用 API 25 以上版本建立新的 Wear 裝置。
- 從 Android Studio 執行模擬器。
- 按一下模擬器工具列底部的三點溢位選單。在新視窗中按一下「Rotary input」分頁標籤,即可開啟旋轉輸入介面,並嘗試以旋轉輸入捲動。
下列影片在模擬器中展示旋轉輸入功能: