Wlad Asked:2024-04-23 20:40:11 +0800 CST2024-04-23 20:40:11 +0800 CST 2024-04-23 20:40:11 +0800 CST Compose BasicTextField:从 ClipboardManager 缓冲区粘贴图片 772 应用程序 - 自己的聊天。 当您尝试从剪贴板粘贴图片时如何捕获事件? 让 BasicTextField 本身保持为空。 最主要的是捕获事件并获取 Uri(获取 Uri 没有问题) 请告诉我在哪个方向挖掘以及这是否可能。 ps 根据电报判断 - 这是可能的。 java 1 个回答 Voted Best Answer Wlad 2024-04-26T13:41:59+08:002024-04-26T13:41:59+08:00 找到了解决方案。 第一个解决方案是使用经典的解决方案,EditText如下所示: @SuppressLint("NewApi") class EditTextWithImageClipBoard @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null ) : androidx.appcompat.widget.AppCompatEditText(context, attrs) { private val mimeTypesArray = arrayOf("image/*") var onClipBoardPaste: (ClipData.Item) -> Unit = {} override fun onCreateInputConnection(outAttrs: EditorInfo): InputConnection? { var ic = super.onCreateInputConnection(outAttrs) ?: return null EditorInfoCompat.setContentMimeTypes(outAttrs, mimeTypesArray) val mimeTypes = ViewCompat.getOnReceiveContentMimeTypes(this) if (mimeTypes != null) { EditorInfoCompat.setContentMimeTypes(outAttrs, mimeTypes) ic = InputConnectionCompat.createWrapper(this, ic, outAttrs) } return ic } init { setOnReceiveContentListener(mimeTypesArray) { view, payload -> runCatching { payload.clip.getItemAt(0) }.getOrNull()?.let { onClipBoardPaste(it) } null } } } 主要的魔力发生在该方法中;setOnReceiveContentListener 当您尝试从剪贴板粘贴某些内容时,该方法负责处理事件。 需要注意的是,由于该方法的原因,您现在必须自己处理文本插入 onCreateInputConnection当键盘上方还有一个额外的系统面板可以将当前图片粘贴到剪贴板时,需要使用该方法。 如果不重写此方法,此附加面板将不会显示图像(仅文本) 如何使用这个Compose? 经典最近AndroidView 才出现,Compose发行版中1.7.x出现了类似的情况, 这是解决问题的第二个选项,但我还没有检查 BasicTextField2( value = value, onValueChange = { value = it }, modifier = Modifier .fillMaxWidth() .receiveContent(setOf(MediaType.Image)) { content -> val selectedMediaUri = content.platformTransferableContent?.linkUri null } )
找到了解决方案。
第一个解决方案是使用经典的解决方案,
EditText
如下所示:主要的魔力发生在该方法中;
setOnReceiveContentListener
当您尝试从剪贴板粘贴某些内容时,该方法负责处理事件。
需要注意的是,由于该方法的原因,您现在必须自己处理文本插入
onCreateInputConnection
当键盘上方还有一个额外的系统面板可以将当前图片粘贴到剪贴板时,需要使用该方法。如果不重写此方法,此附加面板将不会显示图像(仅文本)
如何使用这个
Compose
?经典最近
AndroidView
才出现,
Compose
发行版中1.7.x
出现了类似的情况,这是解决问题的第二个选项,但我还没有检查