拖放是最基本的手勢操作,用戶可以點擊并按住圖片、文本或其他數據元素,然后將其拖動至另一個應用 (或者同一個應用的其他位置) 并松手,即可將數據放置到新的位置上。手勢通常在觸摸屏上表現為長按,在使用鼠標時則為點擊并拖動。
雖然 Android 很早以前便一直支持拖放操作 (DragEvent 在 Android 3.0 即 API 級別為 11 中引入),但事實證明實現對處理手勢、事件、權限和回調的全面支持并不容易。
我們將為您介紹目前處于 Alpha 階段的 Jetpack DragAndDrop 庫,幫助您更輕松地在應用中處理拖放數據。
/* Copyright 2021 Google LLC.SPDX-License-Identifier: Apache-2.0 */
implementation'androidx.draganddrop1.0.0-alpha02'
拖放操作在大屏幕設備中變得越來越重要: 平板電腦和筆記本電腦,尤其是可折疊設備,其分屏模式的拖放操作使用概率是傳統手機的 7 倍。對用戶而言,將數據從一個應用拖動到另一個應用是很自然的體驗,因此用戶在分屏或窗口模式下使用應用可以更有效地進行多任務處理。
分屏或窗口模式
雖然平臺本身支持從 EditText 中拖動文本,但我們強烈建議支持用戶從應用的其他組件中拖動任何圖片、文件和文本。同樣重要的是,我們也鼓勵支持用戶將數據拖放至您的應用。
DropHelper 和 DragStartHelper 結合使用,可以更輕松地處理手勢支持、回調、樣式和像素完美對齊。
DragStartHelper
DragStartHelper 是 Jetpack 核心庫中的工具類,通常用于檢測開始拖動的手勢,例如長按或鼠標的點擊拖動操作。
DropHelper/* Copyright 2021 Google LLC.SPDX-License-Identifier: Apache-2.0 */
// 將視圖設置為可拖動以共享文件。
// DragStartHelper 負責攔截拖動手勢并設置監聽器。
DragStartHelper(draggableView) { view, _ ->
// 自動設置合適的 MIME 類型
val dragClipData = ClipData.newUri(contentResolver, "File", fileUri)
// 設置被拖動對象的視覺效果
// 可以擴展和自定義,我們這里使用默認效果
val dragShadow = View.DragShadowBuilder(view)
// 開始拖動。注意可以使用全局標記實現跨應用拖動。
view.startDragAndDrop(
dragClipData,
dragShadow,
null, // 額外的本地狀態信息,可選項
// 由于這是一個 "content:" URI 而不僅僅是純文本,我們可以使用
// DRAG_FLAG_GLOBAL_URI_READ 標記使得其他應用可以從我們的 ContentProvider
// 中讀取信息。如果不使用該標記,其他應用不會收到拖動事件。
DRAG_FLAG_GLOBAL or DRAG_FLAG_GLOBAL_URI_READ)
)
}.attach()
新的 DropHelper 是一個負責監聽器和放置目標的工具類。務必使用 addInnerEditTexts() 構建 DropHelper.Options,以此確保您放置目標內任何嵌套的 EditTexts 都不會獲得焦點。
/* Copyright 2021 Google LLC.SPDX-License-Identifier: Apache-2.0 */
DropHelper.configureView(
// 處理該放置事件的 Activity
this,
// 目標放置視圖會被高亮
outerDropTarget,
// 支持的 MIME 類型
arrayOf(MIMETYPE_TEXT_PLAIN, "image/*"),
// 配置放置目標的選項
DropHelper.Options.Builder()
//要確保正確高亮放置目標,所有放置目標視圖層級內的EditText元素
// 必須通過該方法添加到調用中。否則目標視圖內的 EditText 而不是目標視圖
// 將在拖放操作中獲得焦點。
.addInnerEditTexts(innerEditText)
.build()
) { _, payload ->
// 在這里處理數據,返回需要委托給平臺的任何內容
...
}
了解更多
更多詳情請參閱給 Android 開發者的拖放指南,通過大屏幕示例更深入了解 DropHelper 實踐。歡迎立即嘗試 Alpha 版本并期待您的反饋。
您也可以向我們提交反饋,或分享您喜歡的內容、發現的問題。您的反饋對我們非常重要,感謝您的支持!
原文標題:Jetpack DragAndDrop 庫——拖放操作如此輕松!
文章出處:【微信公眾號:谷歌開發者】歡迎添加關注!文章轉載請注明出處。
審核編輯:湯梓紅
-
Android
+關注
關注
12文章
3941瀏覽量
127720 -
電腦
+關注
關注
15文章
1736瀏覽量
69077 -
設備
+關注
關注
2文章
4539瀏覽量
70795
原文標題:Jetpack DragAndDrop 庫——拖放操作如此輕松!
文章出處:【微信號:Google_Developers,微信公眾號:谷歌開發者】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論