Jetpack Compose 1.7中的新修饰符receiveContent

在 Jetpack Compose 1.7.0 中提供了一个新的修饰符,Modifier.receiveContent,通过该修饰符可以支持在输入框中输入输入法软键盘中自带的图片表情等,非常方便。

示例代码如下:

class MyActivity: ComponentActivity() {  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MyComposeApplicationTheme {
                Column(
                    modifier = Modifier.fillMaxSize(),
                    horizontalAlignment = Alignment.CenterHorizontally,
                    verticalArrangement = Arrangement.Center
                ) {
                    var text by remember { mutableStateOf("") }
                    var imageUri by remember { mutableStateOf(Uri.EMPTY) }
                    AsyncImage(
                        model = imageUri,
                        contentDescription = null,
                        modifier = Modifier.height(150.dp),
                        contentScale = ContentScale.FillHeight
                    )
                    BasicTextField2(
                        value = text,
                        onValueChange = { text = it },
                        textStyle = TextStyle(fontSize = 14.sp),
                        modifier = Modifier
                            .padding(horizontal = 16.dp)
                            .fillMaxWidth()
                            .clip(RoundedCornerShape(5.dp))
                            .padding(16.dp)
                            .receiveContent(MediaType.All) { content ->
                                if (content.hasMediaType(MediaType.Image)) {
                                    val clipData = content.clipEntry.clipData
                                    for (index in 0 until clipData.itemCount) {
                                        val item = clipData.getItemAt(index) ?: continue
                                        imageUri = item.uri ?: continue
                                    }
                                }
                                content
                            }
                    )
                }
            }
        }
    }
}

注意 receiveContent 必须与 BasicTextField2 集成,以接受由软件键盘或通过剪贴板粘贴操作提供的富媒体内容。

BasicTextField2是官方正在优化的实验性版本,它修复了许多BasicTextField中存在的bug,并且支持许多新特性,在未来我们应该尽量选择使用 BasicTextField2来进行开发。如果想了解更多关于 BasicTextField2的新特性,可以看这里

效果如下:

在这里插入图片描述
在这里插入图片描述

receiveContent 不仅可以接受软键盘中输入的图片,同时它也可以接受你从其他地方复制到剪贴板中的图片内容,可以粘贴到输入框中输入。

注意示例代码中使用了图片加载库 coil 加载gif图片,需要添加依赖:

implementation("androidx.compose.ui:ui:1.7.0-alpha01") 

implementation("io.coil-kt:coil-compose:2.5.0") 
implementation("io.coil-kt:coil-gif:2.5.0") 

要使用 coil 加载gif,还需要在 Application 中进行一下全局的配置,参考代码如下:

class MyApp: Application(), ImageLoaderFactory { 
    override fun newImageLoader(): ImageLoader {
        return ImageLoader(this)
            .newBuilder()
            .components {
                if(Build.VERSION.SDK_INT >= 28) { 
                    add(ImageDecoderDecoder.Factory()) 
                } else {
                    add(GifDecoder.Factory()) 
                }
            }
            .build() 
    }
}
内容概要:本文围绕含氢气氨气的综合能源系统优化调度展开研究,提出了一种基于Matlab的仿真建模与优化方法,旨在实现多能互补、高效利用与低碳运行。研究构建了包含风能、太阳能、电解水制氢、氢气储存、氢合成氨、氨储存及能源转换设备在内的综合能源系统架构,重点考虑了氢、氨作为二次能源载体在能量存储与转化中的关键作用。通过建立系统各组件的数学模型,如电解槽效率模型、合成氨反应动力学模型、储氢储氨容量模型等,并结合可再生能源出力不确定性、负荷需求波动等因素,构建了以系统运行成本最小化、碳排放最小化或多目标综合最优为目标的优化调度模型。采用智能优化算法(如改进粒子群算法、多目标优化算法等)对模型进行求解,实现了对系统中各类设备出力、储能充放电状态、能量交互功率等变量的精细化调度,有效提升了能源利用效率与系统经济性。; 适合人群:具备一定电力系统、能源工程或自动化专业背景,熟悉Matlab/Simulink仿真工具,从事能源、综合能源系统、氢能等领域研究的研发人员、研究生及高年级本科生。; 使用场景及目标:① 为含氢、氨等型能源载体的综合能源系统规划设计提供理论依据和技术支撑;② 实现对风光等波动性可再生能源的高效消纳,提高系统灵活性与可靠性;③ 通过优化调度降低系统运行成本与碳排放强度,服务于“双碳”战略目标。; 阅读建议:此资源以Matlab代码实现为核心,提供了完整的仿真模型与优化算法代码,学习者应结合相关专业知识,深入理解模型构建的物理意义与数学表达,调试并运行代码以掌握其工作流程,进而可根据实际需求对模型进行扩展与改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

川峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值