使用Jetpack Compose从图库中选择图片

news2024/12/23 23:07:05

使用Jetpack Compose从图库中选择图片

添加依赖

Jetpack Compose是一种用于构建Android应用界面的现代工具包。它提供了一种声明性的方式来创建用户界面,使开发者能够更轻松地构建交互式和可定制化的应用程序。本文将介绍如何使用Jetpack Compose从图库中选择图片,并显示在应用程序界面上。

首先,我们需要添加一个名为Coil的依赖项,用于在应用程序中显示图片。我们可以通过在build.gradle.kts文件中的dependencies块中添加以下代码来完成这一步骤:

https://coil-kt.github.io/coil/compose/

dependencies {
    implementation("io.coil-kt:coil-compose:2.4.0")
}

选择一张图片

首先,我们需要创建一个变量来存储照片的URI(统一资源标识符)。

var imageUri by remember {
    mutableStateOf<Uri?>(null)
}

现在要打开图库,我们需要使用rememberLauncherForActivityResult,它具有GetContent合同。

val galleryLauncher = rememberLauncherForActivityResult(
    contract = ActivityResultContracts.GetContent(),
    onResult = { uri ->
        uri?.let {
            imageUri = it
        }
    }
)

让我们添加一个ImageTextButton。仅当imageUri不为空时,Image才会显示出来。要打开图库,我们只需要向图库启动器提供内容类型即可。

Column {
    imageUri?.let {
        Image(
            painter = rememberAsyncImagePainter(model = imageUri),
            contentDescription = null,
            modifier = Modifier
                .clip(CircleShape)
                .size(36.dp)
        )
    }
    
    TextButton(
        onClick = {
            galleryLauncher.launch("image/*")
        }
    ) {
        Text(
            text = "Pick image"
        )
    }
}

选择多个图像

首先,我们需要创建一个变量来存储URI(统一资源标识符)列表。

var imageUriList = remember {
    mutableStateOf<List<Uri>>(emptyList())
}

现在要打开图库,我们需要使用rememberLauncherForActivityResult,它具有GetMultipleContents合同。

val galleryLauncher = rememberLauncherForActivityResult(
    contract = ActivityResultContracts.GetMultipleContents(),
    onResult = { uriList ->
        imageUriList.value = uriList
    }
)

通过以上步骤,我们就能够实现使用Jetpack Compose选择多个图库图片的功能。

结论

本文介绍了如何使用Jetpack Compose从图库中选择单个或多个图片,并在应用程序界面中显示它们。通过使用rememberLauncherForActivityResult方法和相应的合同,以及添加适当的依赖项,我们能够轻松地集成图库选择功能到Jetpack Compose应用程序中。希望本文能够帮助您在开发过程中更好地利用Jetpack Compose的强大功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1153377.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

静态NAT之(Nat server )

-静态NAT&#xff0c;指的是对外网所有类型的类型&#xff0c;都允许进入到内网特定的设备上&#xff08;不安全&#xff09; -静态PAT&#xff0c;指的是在对外网进入到内网的时候&#xff0c;仅仅针对特定类型协议的流量做转换 那么这种静态 PAT &#xff0c;通常都是应用于…

【CSS】position

CSS position 1.静态布局 static static 是 position 属性的默认值&#xff0c;表示没有定位。使用静态定位的元素会按照元素正常的位置显示&#xff0c;并且不会受到 top、bottom、left、right 和 z-index 属性的影响。 2.相对定位 relative 相对定位就是元素相对于自己默…

剑指offer --- 字符串中替换空格

目录 前言 一、读懂题目 二、思路分析 三、代码呈现 总结 前言 作为引入讲讲这道题的由来&#xff0c;在网络编程中&#xff0c;如果 URL 参数中含有特殊字符&#xff0c;如空格、#等&#xff0c;可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务…

设计模式04———桥接模式 c#

桥接模式&#xff1a;将一个事物从多个维度抽象出来&#xff0c;采用 分离 和 组合 的方式 替代 原本类的继承 桥接模式&#xff08;Bridge Pattern&#xff09;是一种软件设计模式&#xff0c;属于结构型模式&#xff0c;它用于将抽象部分与具体实现部分分离&#xff0c;以便它…

SpringCloud(三) Ribbon负载均衡

SpringCloud(二) Eureka注册中心的使用-CSDN博客 在SpringCloud(二)中学习了如何通过Eureka实现服务的注册和发送,从而通过RestTemplate实现不同微服务之间的调用,加上LoadBalance注解之后实现负载均衡,那负载均衡的原理是什么呢? 目录 一, 负载均衡 1.1 负载均衡原理 1.2 源…

怎么用python代码查看可用的gpu,然后指定可用的gpu运行

查看gpu import torch# 检查CUDA是否可用 if torch.cuda.is_available():# 获取GPU设备数量device_count torch.cuda.device_count()# 列出可用的GPU设备for i in range(device_count):print(f"GPU {i}: {torch.cuda.get_device_name(i)}") else:print("CUDA …

JZ22链表中倒数最后k个节点

JZ22链表中倒数最后k个节点 解法一 双指针法&#xff0c;定义两个快慢指针&#xff0c;先让快指针走k步&#xff0c;然后让两个指针以相同速度向前&#xff0c;直到快指针走到尾部none的位置&#xff0c;此时慢指针正好在倒数第k的位置此方法的时间复杂度为O&#xff08;n&…

Ubuntu Desktop 20.04升级gcc-11

默认自带的gcc是9&#xff0c;需要升级到11 sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update sudo apt install gcc-11 sudo apt install g11 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 50 sudo update-alternatives -…

数字孪生三剑客!云渲染及虚拟仿真服务器产品MapGIS Server for Unreal来了

10月18日&#xff0c;新一代全空间智能GIS平台的升级之作——MapGIS 10.6 Pro在深圳正式发布&#xff0c;整场发布会全空间GIS、智能GIS、信创GIS、全栈开发各维度创新一一揭晓&#xff0c;全空间一体化、深度融合云端的全系产品全面升级&#xff0c;科技盛宴、高潮迭起。其中尤…

海外跨境电商云厂商阿里云、华为云、九河云选择攻略

近几年出海已成为趋势&#xff0c;而要打有准备的仗&#xff0c;就必须先收集关键信息。国内企业出海需要对海外市场进行深入的分析和挖掘&#xff0c;数据分析技术可以帮助国内企业更好地了解海外市场的需求和趋势&#xff0c;包括市场调研、用户画像、销售数据分析等方面&…

UnrealSynth虚幻合成数据生成器

UnrealSynth 虚幻合成数据生成器利用虚幻引擎的实时渲染能力搭建逼真的三维场景&#xff0c;为 YOLO 等 AI 模型的训练提供自动生成的图像和标注数据。UnrealSynth 生成的合成数据可用于深度学习模型的训练和验证&#xff0c;可以极大地提高各种行业细分场景中目标识别任务的实…

RCD负载箱的价格和性价比如何?

RCD负载箱用于测试电力设备的专用设备&#xff0c;主要用于检测电路的电流、电压和功率等参数。 RCD负载箱的价格与其品牌、型号、功能和性能有关&#xff0c;知名品牌和高性能的RCD负载箱价格会相对较高&#xff0c;而一些普通品牌或功能较简单的RCD负载箱价格则相对较低&…

使用 :has() 选择前一个相邻元素

使用 CSS :has() 选择前一个兄弟姐妹 CSS 更令人抓狂的限制之一是长期以来它无法根据其子元素或前一个兄弟元素来选择元素。这使得构建可以针对元素的先前同级元素的 CSS 选择器变得不可能&#xff0c;但是has:()伪类&#xff08;以及来自选择器级别 4 的、 和&#xff09;已经…

【C++入门 二 】学习使用C++命名空间及其展开

C入门 二 1. C第一个小程序2.命名空间2.1命名冲突2.2 命名空间2.2.1 命名空间定义2.2.2.命名空间的展开方式1&#xff08;直接展开&#xff09;方式2&#xff08;指定展开&#xff09; 3.C输入&输出①输出②输入 1. C第一个小程序 下面这段代码有两个特性 1、io流 2、命名空…

innovus:如何解决editAddRoute不能在平行线间打孔的问题

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 用户使用editAddRoute命令或者图形界面手动拉线,默认只能在相同net 的不同层net shape crossover(交叉)位置上打孔,如图右侧GNDD交叉的位置有打孔,而左侧平行的两条net shape无法自动打孔。 有…

众和策略:鸿蒙4升级设备数量破亿;财政部调整保险公司考核方式

重要的消息有哪些 财政部调整保险公司查核办法 增强险资入市积极性 财政部10月30日消息显现&#xff0c;近日已印发《关于引导保险资金长时间稳健投资、调整国有商业保险公司绩效评价相关指标的告诉》&#xff08;下称《告诉》&#xff09;&#xff0c;清晰将国有商业保险公司…

​CRM中的大客户销售是什么?​

对企业来说&#xff0c;大客户可能贡献了大部分的销售业绩。什么样的客户可以被认定为是大客户&#xff1f;大客户销售与普通销售有何区别&#xff1f;针对大客户又该采取什么样的销售策略呢&#xff1f;从回答这几个问题开始&#xff0c;我们来说说CRM中的大客户销售是什么&am…

数智领航未来∣2023契约锁企企通专题沙龙:数字建设,为企业高质量发展注入新动能

今年两会期间&#xff0c;“数字经济”是当之无愧的热词之一。中央经济工作会议提出&#xff0c;要大力发展数字经济&#xff0c;提升常态化监管水平&#xff0c;支持平台经济发展。 当前数据作为新型生产要素&#xff0c;价值尚未得到充分释放&#xff0c;需要疏通数据要素流通…

Microsoft 365 管理自动化

Microsoft 365 服务被大多数组织广泛使用&#xff0c;每天生成的数据量巨大。解决 Microsoft 365 中的问题可能非常困难&#xff0c;并且使用多个管理中心来保护组织变得复杂。本机控制台还缺少某些批量管理任务、全面的审计报告和基于角色的精细访问控制。 Microsoft 360 管理…

2、NLP文本预处理技术:词干提取和词形还原

一、说明 在上一篇文章中&#xff0c;我们解释了文本预处理的重要性&#xff0c;并解释了一些文本预处理技术。在本文中&#xff0c;我们将介绍词干提取和词形还原主题。 词干提取和词形还原是两种文本预处理技术&#xff0c;用于将单词还原为其基本形式或词根形式。这些技术的…