從 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 裝置上推出了預測返回手勢,預測返回手勢是多年版本發布的一部分。完整實作後,這項功能可讓使用者在完成返回手勢前預覽目的地或其他結果,再決定要繼續完成返回手勢或停留在目前的檢視畫面。
詳情請參閱「新增對預測返回手勢的支援」。
其他資源
如要進一步瞭解手勢操作,請參閱以下資源: