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() 
    }
}
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

川峰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值