提问人:Kalpesh Doru 提问时间:10/28/2023 最后编辑:Peter MortensenKalpesh Doru 更新时间:10/30/2023 访问量:93
如何使用 Jetpack Compose Photo Picker 仅过滤和选择 PNG 图像?
How can I filter and select only PNG images with Jetpack Compose Photo Picker?
问:
我正在使用 Jetpack Compose 和照片选取器来允许用户在我的应用中选择图像。但是,我想将选择限制为仅PNG图像。在 Jetpack Compose 中使用照片选取器时,如何实现此过滤器?
这是我使用onClick按钮打开Photo Picker的代码:
val multiplePhotoPickerLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.PickMultipleVisualMedia(),
onResult = { uris -> })
// Below code for open image picker
Button(modifier = Modifier
.fillMaxWidth()
.bounceClick(),
colors = ButtonDefaults.buttonColors(
White, disabledContainerColor = White80,
disabledContentColor = White
),
onClick = {
multiplePhotoPickerLauncher.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly)
)
}
) {
Text(
color = Black80,
text = "${attachments.size} / 10"
)
}
答:
0赞
ftm.amani
10/28/2023
#1
您应该像这样设置 MIME 类型:
val mimeType = "image/png"
onClick = {
multiplePhotoPickerLauncher.launch(
PickVisualMediaRequest(
ActivityResultContracts
.PickVisualMedia.SingleMimeType(mimeType))
)
}
-1赞
Zobaer Hossain
10/28/2023
#2
以下是有关如何执行此操作的分步指南:
实现自定义过滤逻辑以仅过滤 PNG 图像。
在启动照片选取器之前修改代码以处理筛选器。
向用户显示筛选后的结果。
下面是如何实现此目的的示例:
val multiplePhotoPickerLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.GetContent(),
onResult = { uris ->
// Filter the selected uris to retain only PNG images
val pngUris = uris.filter { uri ->
val mimeType = contentResolver.getType(uri)
mimeType?.startsWith("image/png") == true
}
// Now you have a list of PNG image URIs in pngUris
// Do something with them
}
)
Button(
modifier = Modifier.fillMaxWidth(),
onClick = {
// Launch the Photo Picker
val intent = Intent(Intent.ACTION_GET_CONTENT).apply {
type = "image/*"
putExtra(Intent.EXTRA_MIME_TYPES, arrayOf("image/png"))
addCategory(Intent.CATEGORY_OPENABLE)
putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
}
multiplePhotoPickerLauncher.launch(intent)
}
) {
Text(text = "Select PNG Images")
}
在此代码中,我们用于选择任何类型的图像(“image/*”)并指定 MIME 类型“image/png”以在启动照片选择器时仅过滤 PNG 图像。用户选择图像后,我们会根据其 MIME 类型筛选 URI,以仅保留 PNG 图像。ActivityResultContracts.GetContent()
评论
0赞
blackapps
10/29/2023
因此,用户选择了 10 个 jpg、2 个 gif 和 4 个 png,而您只给他留下 png。多么可爱。
0赞
Zobaer Hossain
10/29/2023
@blackapps请阅读问题标题,用户只想显示 png。
2赞
blackapps
10/29/2023
不。该应用程序的程序员希望用户只能选择 png。使用您的“解决方案”,用户仍然可以选择所有类型的图像。
1赞
blackapps
10/29/2023
如果用户只能选择 png,则不必在 onActivityResult 中过滤 png 的 uri。
0赞
Peter Mortensen
11/22/2023
这个答案是由 ChatGPT(或类似)生成的吗?
评论