0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Jetpack DragAndDrop庫輕松處理拖放數(shù)據(jù)

谷歌開發(fā)者 ? 來源:谷歌開發(fā)者 ? 作者:谷歌開發(fā)者 ? 2022-02-12 09:34 ? 次閱讀

拖放是最基本的手勢操作,用戶可以點(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)擊拖動操作。

/* 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

新的 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)載請注明出處。

審核編輯:湯梓紅


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(liá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)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    介紹Arduino借助多線程SCoop如何輕松實現(xiàn)并發(fā)處理任務(wù)

    我們在用Arduino開發(fā)復(fù)雜項目時,或多或少會面臨多任務(wù)同時處理的工作場景,本篇簡單介紹Arduino借助多線程SCoop如何輕松實現(xiàn)并發(fā)處理任務(wù)。
    發(fā)表于 08-24 06:57

    易語言-文件拖放

    易語言是一門以中文作為程序代碼編程語言學(xué)習(xí)例程:易語言-文件拖放
    發(fā)表于 06-06 17:36 ?4次下載

    數(shù)據(jù)庫引擎是什么

    數(shù)據(jù)庫引擎是用于存儲、處理和保護(hù)數(shù)據(jù)的核心服務(wù)。利用數(shù)據(jù)庫引擎可控制訪問權(quán)限并快速處理事務(wù),從而滿足企業(yè)內(nèi)大多數(shù)需要
    的頭像 發(fā)表于 02-24 14:43 ?1.1w次閱讀
    <b class='flag-5'>數(shù)據(jù)庫</b>引擎是什么

    微軟 Surface Duo 雙屏更新,支持谷歌 Jetpack 窗口管理器

    。 近期,微軟宣布,他們?yōu)槲④?Surface Duo 開發(fā)的雙屏 1.0.0-beta1 版本,集成了谷歌 Jetpack 窗口管理器支持。 IT之家獲悉,為了幫助開發(fā)者,微軟使底層設(shè)備界面可以交換,因此
    的頭像 發(fā)表于 12-14 14:05 ?1520次閱讀

    NVIDIA JetPack SDK AI應(yīng)用程序指南

    NVIDIA JetPack SDKis是構(gòu)建AI應(yīng)用程序的最全面的解決方案。使用JetPackinstaller為您的Jetson開發(fā)人員工具包閃存最新的操作系統(tǒng)映像,為主機(jī)PC和開發(fā)人員工具包安裝開發(fā)人員工具,并安裝啟動開發(fā)環(huán)境所需的和api、示例和文檔。
    發(fā)表于 04-06 16:09 ?0次下載
    NVIDIA <b class='flag-5'>JetPack</b> SDK AI應(yīng)用程序指南

    詳解Jetpack Compose 1.1版本的新功能

    我們一如既往地搭建產(chǎn)品路線圖,現(xiàn)在已經(jīng)發(fā)布了 Jetpack Compose 的 1.1 版本,這是 Android 的現(xiàn)代原生界面工具包。此版本新增了一些功能,比如經(jīng)過優(yōu)化的焦點(diǎn)處理、觸摸目標(biāo)值
    的頭像 發(fā)表于 03-11 10:14 ?1328次閱讀

    jetpack FreeBSD應(yīng)用容器

    ./oschina_soft/jetpack.zip
    發(fā)表于 05-11 09:17 ?1次下載
    <b class='flag-5'>jetpack</b> FreeBSD應(yīng)用容器

    JetPack5.0.2 的主要亮點(diǎn)

    JetPack5.0.2 生產(chǎn)版本取代了僅用于開發(fā)用途的 JetPack5.0 / 5.0.1開發(fā)者預(yù)覽版本。
    的頭像 發(fā)表于 08-22 10:43 ?1424次閱讀

    NVIDIA JetPack SDK的主要功能

    NVIDIA JetPack SDK是構(gòu)建 AI 應(yīng)用的全面解決方案,支持所有 Jetson 模塊和開發(fā)者套件。
    的頭像 發(fā)表于 10-17 12:05 ?2758次閱讀

    Jetpack 更新一覽 | 2022 Android 開發(fā)者峰會

    。Android Jetpack 套件包含超過 100 個、工具及指南,可幫助開發(fā)者遵循最佳實踐、減少樣板代碼,并編寫可在各種 Android 版本和設(shè)備中一致運(yùn)行的代碼。您可以借助 Android
    的頭像 發(fā)表于 12-05 17:50 ?832次閱讀

    如何通過python輕松處理大文件

    眾所周知,python除了以簡潔著稱,其成熟的第三方功能也是很強(qiáng)大的,今天浩道帶大家看看如何通過python輕松處理大文件,真讓人直呼yyds 。
    的頭像 發(fā)表于 04-27 10:54 ?788次閱讀

    在 I/O 看未來 | Jetpack 新功能一覽

    組成支柱。Android Jetpack 套件包含超 100 個、工具及指南,可幫助開發(fā)者遵循最佳實踐、減少樣板代碼,并編寫可在各種 Android 版本和設(shè)備中一致運(yùn)行的代碼,以便您可以專注于為
    的頭像 發(fā)表于 06-01 01:20 ?343次閱讀
    在 I/O 看未來 | <b class='flag-5'>Jetpack</b> 新功能一覽

    python讀取數(shù)據(jù)庫數(shù)據(jù) python查詢數(shù)據(jù)庫 python數(shù)據(jù)庫連接

    python讀取數(shù)據(jù)庫數(shù)據(jù) python查詢數(shù)據(jù)庫 python數(shù)據(jù)庫連接 Python是一門高級編程語言,廣泛應(yīng)用于各種領(lǐng)域。其中,Python在
    的頭像 發(fā)表于 08-28 17:09 ?1601次閱讀

    Jetpack WindowManager 1.1 穩(wěn)定版

    變化。許多新款設(shè)備都已進(jìn)入市場,大量新用例也已解鎖! Jetpack WindowManager 在幫助您優(yōu)化您的 Android 應(yīng)用上發(fā)揮重要作用,使其能夠適用于不同的設(shè)備類型。并且此版本還包含多項
    的頭像 發(fā)表于 10-18 19:10 ?360次閱讀
    <b class='flag-5'>Jetpack</b> WindowManager 1.1 穩(wěn)定版

    NVIDIA JetPack 6.0版本的關(guān)鍵功能

    NVIDIA JetPack SDK 支持 NVIDIA Jetson 模塊,為構(gòu)建端到端加速 AI 應(yīng)用提供全面的解決方案。JetPack 6 通過微服務(wù)和一系列新功能,擴(kuò)展了 Jetson 平臺的靈活性和可擴(kuò)展性,是 2024 年截至目前下載量最高的
    的頭像 發(fā)表于 09-09 10:18 ?136次閱讀
    NVIDIA <b class='flag-5'>JetPack</b> 6.0版本的關(guān)鍵功能