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