確保與手勢操作功能相容

自 Android 10 (API 級別 29) 起,Android 系統支援完全以手勢操作的導覽模式。應用程式開發人員必須完成兩項作業,才能確保應用程式與這項功能相容:

  • 將應用程式內容延伸至無邊框。
  • 處理衝突的應用程式手勢。

此外,Android 13 (API 級別 33) 在手機、大螢幕裝置和折疊式裝置等 Android 裝置上推出了預測返回手勢,這是多年期發布計畫的一部分。應用程式開發人員可以採取行動,確保應用程式支援預測返回手勢。

提供無邊框應用程式內容

如要充分利用浮動導覽列提供的額外螢幕空間,您需要在應用程式中設定特定變更。

詳情請參閱「在應用程式中以無邊框方式顯示內容」一文。

處理衝突的應用程式手勢

手勢操作模式可能會與應用程式開發人員先前使用的手勢發生衝突。因此您可能需要調整應用程式的使用者介面。

與返回手勢衝突

新的返回手勢是從螢幕左側或右側邊緣向內滑動。這可能會干擾這些區域的應用程式導覽元素。如要維持畫面左右兩側邊緣元素的運作,請向系統指出需要接收觸控輸入的區域,選擇性停用返回手勢。方法是將 List<Rect> 傳遞至 Android 10 中導入的 View.setSystemGestureExclusionRects() API。從 androidx.core:core:1.1.0-dev01 開始,ViewCompat 也提供這個方法。

例如:

Kotlin

var exclusionRects = listOf(rect1, rect2, rect3)

fun onLayout(
        changedCanvas: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
  // Update rect bounds and the exclusionRects list
  setSystemGestureExclusionRects(exclusionRects)
}

fun onDraw(canvas: Canvas) {
  // Update rect bounds and the exclusionRects list
  setSystemGestureExclusionRects(exclusionRects)
}

Java

List<Rect> exclusionRects;

public void onLayout(
        boolean changedCanvas, int left, int top, int right, int bottom) {
    // Update rect bounds and the exclusionRects list
    setSystemGestureExclusionRects(exclusionRects);
}

public void onDraw(Canvas canvas) {
    // Update rect bounds and the exclusionRects list
    setSystemGestureExclusionRects(exclusionRects);
}

與主畫面或快速切換手勢衝突

新的系統手勢「返回主畫面」和「快速切換」都涉及在螢幕底部 (先前導覽列所在的位置) 滑動。應用程式無法停用這些手勢,但可以停用返回手勢。

為解決這個問題,Android 10 導入了 WindowInsets.getMandatorySystemGestureInsets() API,可將觸控辨識門檻告知應用程式。

遊戲和其他非 View 應用程式

如果遊戲和其他應用程式沒有檢視區塊階層,使用者通常需要在系統手勢區域附近滑動。在這種情況下,遊戲可以使用 Window.setSystemGestureExclusionRects() 排除與系統手勢預留區域重疊的區域。遊戲必須確保只在必要時排除這些區域,例如在遊戲過程中。

如果遊戲要求使用者在主畫面手勢區域附近滑動,應用程式可以要求以沉浸模式版面配置。這樣一來,使用者與遊戲互動時,系統手勢就會停用,但使用者可以從螢幕底部向上滑動,重新啟用系統手勢。

更新應用程式,支援預測返回手勢

Android 13 (API 級別 33) 在手機、大螢幕裝置和折疊式裝置等 Android 裝置上推出了預測返回手勢,預測返回手勢是多年發布計畫的一部分。在完整實作下,這項功能可讓使用者在完成返回手勢前先預覽目的地畫面或其他結果,再決定要繼續完成返回手勢或停留在目前的檢視畫面。

詳情請參閱「新增對預測返回手勢的支援」。

其他資源

如要進一步瞭解手勢操作,請參閱下列文章:

網誌文章

影片