gpt4 book ai didi

android - 如何在 jetpack compose 中从键盘接收 GIF?

转载 作者:行者123 更新时间:2023-12-04 23:56:51 25 4
gpt4 key购买 nike

我正在尝试在 jetpack compose 中进行聊天,并且我希望能够使用三星上的标准 gif 键盘发送 gif。
当我在普通 TextField 上单击 GIF 时,我目前收到一条消息“无法在此处输入此内容”
我发现了一个叫做 的东西提交内容 API 这应该可以在旧的 EditText 中添加 GIF,所以我在 AndroidView 中尝试这样做,现在我不再收到错误消息,但我也不知道 GIF 在哪里以及它是如何表示的。

AndroidView(factory = {
val editText = @SuppressLint("AppCompatCustomView")
object : EditText(it) {

override fun setOnReceiveContentListener(
mimeTypes: Array<out String>?,
listener: OnReceiveContentListener?
) {
super.setOnReceiveContentListener(mimeTypes, listener)
}


override fun onCreateInputConnection(editorInfo: EditorInfo): InputConnection {
val ic: InputConnection = super.onCreateInputConnection(editorInfo)
EditorInfoCompat.setContentMimeTypes(editorInfo, arrayOf("image/gif"))

val callback =
InputConnectionCompat.OnCommitContentListener { inputContentInfo, _, _ ->
try {
inputContentInfo.requestPermission()
} catch (e: Exception) {
return@OnCommitContentListener false
}
true // return true if succeeded
}
return InputConnectionCompat.createWrapper(ic, editorInfo, callback)
}
}
editText
}) {}

最佳答案

callback每次选择 GIF 时都会调用。您可以从 inputContentInfo 获取 URI :

val callback =
InputConnectionCompat.OnCommitContentListener { inputContentInfo, _, _ ->
try {
inputContentInfo.requestPermission()
} catch (e: Exception) {
return@OnCommitContentListener false
}
gifUri = inputContentInfo.contentUri
true // return true if succeeded
}
完美,您应该从这个 URI 复制文件到您自己的存储中并调用 inputContentInfo.releasePermission() , 因为 contentUri将在某个时候被释放。更多信息可以在 documentation 中找到.
您可以使用 Coil 显示此 URI 的内容,如 this answer 所示。 .注意需要添加依赖 io.coil-kt:coil-gif:$coil_version一个完整的工作示例:
var gifUri by remember { mutableStateOf<Uri?>(null) }
val context = LocalContext.current
Image(
rememberImagePainter(
gifUri,
imageLoader = remember {
ImageLoader(context).newBuilder()
.componentRegistry {
if (SDK_INT >= 28) {
add(ImageDecoderDecoder(context))
} else {
add(GifDecoder())
}
}.build()
}
),
contentDescription = null,
modifier = Modifier.size(300.dp)
)

AndroidView(factory = { context ->
val editText = @SuppressLint("AppCompatCustomView")
object : EditText(context) {

override fun setOnReceiveContentListener(
mimeTypes: Array<out String>?,
listener: OnReceiveContentListener?
) {
super.setOnReceiveContentListener(mimeTypes, listener)
}


override fun onCreateInputConnection(editorInfo: EditorInfo): InputConnection {
val ic: InputConnection = super.onCreateInputConnection(editorInfo)
EditorInfoCompat.setContentMimeTypes(editorInfo, arrayOf("image/gif"))

val callback =
InputConnectionCompat.OnCommitContentListener { inputContentInfo, _, _ ->
try {
inputContentInfo.requestPermission()
} catch (e: Exception) {
return@OnCommitContentListener false
}
gifUri = inputContentInfo.contentUri
true // return true if succeeded
}
return InputConnectionCompat.createWrapper(ic, editorInfo, callback)
}
}
editText
}) {}

关于android - 如何在 jetpack compose 中从键盘接收 GIF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71321887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com