0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Jetpack DragAndDrop库轻松处理拖放数据

谷歌开发者 来源:谷歌开发者 作者:谷歌开发者 2022-02-12 09:34 次阅读

拖放是最基本的手势操作,用户可以点击并按住图片、文本或其他数据元素,然后将其拖动至另一个应用 (或者同一个应用的其他位置) 并松手,即可将数据放置到新的位置上。手势通常在触摸屏上表现为长按,在使用鼠标时则为点击并拖动。

虽然 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 核心库中的工具类,通常用于检测开始拖动的手势,例如长按或鼠标的点击拖动操作。

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

新的 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

    文章

    3911

    浏览量

    126990
  • 电脑
    +关注

    关注

    15

    文章

    1676

    浏览量

    68578
  • 设备
    +关注

    关注

    2

    文章

    4431

    浏览量

    70478

原文标题:Jetpack DragAndDrop 库——拖放操作如此轻松!

文章出处:【微信号:Google_Developers,微信公众号:谷歌开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    介绍Arduino借助多线程SCoop如何轻松实现并发处理任务

    我们在用Arduino开发复杂项目时,或多或少会面临多任务同时处理的工作场景,本篇简单介绍Arduino借助多线程SCoop如何轻松实现并发处理任务。
    发表于 08-24 06:57

    易语言-文件拖放

    易语言是一门以中文作为程序代码编程语言学习例程:易语言-文件拖放
    发表于 06-06 17:36 4次下载

    数据库引擎是什么

    数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要
    的头像 发表于 02-24 14:43 1.1w次阅读
    <b class='flag-5'>数据库</b>引擎是什么

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

    。 近期,微软宣布,他们为微软 Surface Duo 开发的双屏 1.0.0-beta1 版本,集成了谷歌 Jetpack 窗口管理器支持。 IT之家获悉,为了帮助开发者,微软使底层设备界面可以交换,因此
    的头像 发表于 12-14 14:05 1561次阅读

    NVIDIA JetPack SDK AI应用程序指南

    NVIDIA JetPack SDKis是构建AI应用程序的最全面的解决方案。使用JetPackinstaller为您的Jetson开发人员工具包闪存最新的操作系统映像,为主机PC和开发人员工具包安装开发人员工具,并安装启动开发环境所需的和api、示例和文档。
    发表于 04-06 16:09 0次下载
    NVIDIA <b class='flag-5'>JetPack</b> SDK AI应用程序指南

    详解Jetpack Compose 1.1版本的新功能

    我们一如既往地搭建产品路线图,现在已经发布了 Jetpack Compose 的 1.1 版本,这是 Android 的现代原生界面工具包。此版本新增了一些功能,比如经过优化的焦点处理、触摸目标值
    的头像 发表于 03-11 10:14 1373次阅读

    jetpack FreeBSD应用容器

    ./oschina_soft/jetpack.zip
    发表于 05-11 09:17 1次下载
    <b class='flag-5'>jetpack</b> FreeBSD应用容器

    JetPack5.0.2 的主要亮点

    JetPack5.0.2 生产版本取代了仅用于开发用途的 JetPack5.0 / 5.0.1开发者预览版本。
    的头像 发表于 08-22 10:43 1471次阅读

    NVIDIA JetPack SDK的主要功能

    NVIDIA JetPack SDK是构建 AI 应用的全面解决方案,支持所有 Jetson 模块和开发者套件。
    的头像 发表于 10-17 12:05 2829次阅读

    Jetpack 更新一览 | 2022 Android 开发者峰会

    。Android Jetpack 套件包含超过 100 个、工具及指南,可帮助开发者遵循最佳实践、减少样板代码,并编写可在各种 Android 版本和设备中一致运行的代码。您可以借助 Android
    的头像 发表于 12-05 17:50 883次阅读

    如何通过python轻松处理大文件

    众所周知,python除了以简洁著称,其成熟的第三方功能也是很强大的,今天浩道带大家看看如何通过python轻松处理大文件,真让人直呼yyds 。
    的头像 发表于 04-27 10:54 840次阅读

    在 I/O 看未来 | Jetpack 新功能一览

    组成支柱。Android Jetpack 套件包含超 100 个、工具及指南,可帮助开发者遵循最佳实践、减少样板代码,并编写可在各种 Android 版本和设备中一致运行的代码,以便您可以专注于为
    的头像 发表于 06-01 01:20 363次阅读
    在 I/O 看未来 | <b class='flag-5'>Jetpack</b> 新功能一览

    python读取数据库数据 python查询数据库 python数据库连接

    python读取数据库数据 python查询数据库 python数据库连接 Python是一门高级编程语言,广泛应用于各种领域。其中,Python在
    的头像 发表于 08-28 17:09 1704次阅读

    Jetpack WindowManager 1.1 稳定版

    变化。许多新款设备都已进入市场,大量新用例也已解锁! Jetpack WindowManager 在帮助您优化您的 Android 应用上发挥重要作用,使其能够适用于不同的设备类型。并且此版本还包含多项
    的头像 发表于 10-18 19:10 401次阅读
    <b class='flag-5'>Jetpack</b> WindowManager 1.1 稳定版

    NVIDIA JetPack 6.0版本的关键功能

    NVIDIA JetPack SDK 支持 NVIDIA Jetson 模块,为构建端到端加速 AI 应用提供全面的解决方案。JetPack 6 通过微服务和一系列新功能,扩展了 Jetson 平台的灵活性和可扩展性,是 2024 年截至目前下载量最高的
    的头像 发表于 09-09 10:18 281次阅读
    NVIDIA <b class='flag-5'>JetPack</b> 6.0版本的关键功能