拖放是最基本的手勢操作,用戶可以點(diǎn)擊并按住圖片、文本或其他數(shù)據(jù)元素,然后將其拖動至另一個應(yīng)用 (或者同一個應(yīng)用的其他位置) 并松手,即可將數(shù)據(jù)放置到新的位置上。手勢通常在觸摸屏上表現(xiàn)為長按,在使用鼠標(biāo)時則為點(diǎn)擊并拖動。
雖然 Android 很早以前便一直支持拖放操作 (DragEvent 在 Android 3.0 即 API 級別為 11 中引入),但事實證明實現(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ī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)記實現(xiàn)跨應(yīng)用拖動。
view.startDragAndDrop(
dragClipData,
dragShadow,
null, // 額外的本地狀態(tài)信息,可選項
// 由于這是一個 "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(
// 處理該放置事件的 Activity
this,
// 目標(biāo)放置視圖會被高亮
outerDropTarget,
// 支持的 MIME 類型
arrayOf(MIMETYPE_TEXT_PLAIN, "image/*"),
// 配置放置目標(biāo)的選項
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 實踐。歡迎立即嘗試 Alpha 版本并期待您的反饋。
您也可以向我們提交反饋,或分享您喜歡的內(nèi)容、發(fā)現(xiàn)的問題。您的反饋對我們非常重要,感謝您的支持!
原文標(biāo)題:Jetpack DragAndDrop 庫——拖放操作如此輕松!
文章出處:【微信公眾號:谷歌開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
審核編輯:湯梓紅
-
Android
+關(guān)注
關(guān)注
12文章
3903瀏覽量
126623 -
電腦
+關(guān)注
關(guān)注
15文章
1660瀏覽量
68184 -
設(shè)備
+關(guān)注
關(guān)注
2文章
4347瀏覽量
70272
原文標(biāo)題:Jetpack DragAndDrop 庫——拖放操作如此輕松!
文章出處:【微信號:Google_Developers,微信公眾號:谷歌開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論