Android:Jetpack Compose——实用的小技巧

本文详细介绍了Android Jetpack Compose中禁用涟漪效果、实现Text控件跑马灯、自动轮播Banner、绘制渐变背景等实用技巧,并提供了代码示例。此外,还讲解了如何控制软键盘的显示与隐藏,以及适配状态栏和导航栏高度的方法。最后,展示了如何监听物理返回键,确保弹窗场景下正确处理返回操作。
摘要由CSDN通过智能技术生成

系列文章目录



前言

Compose已经正式推出1年多了, 随着使用度越来越高,声明式UI已成趋势,以后必然成为原生开发首推方式,本文就介绍了Compose使用过程中的一些细节问题解决方案,助你纵享丝滑~


一、复制文字到剪贴板

使用剪贴板管理器(LocalClipboardManager)即可实现复制文字功能。
示例:

@Composable
fun CopyText(){
	val cm = LocalClipboardManager.current
	Box(modifier = Modifier.clickable{
		// 点击后则复制内容
		cm.setText(AnnotatedString("这是被复制的文字内容"))
	})
}

二、自动显示、隐藏软键盘

1.打开页面,自动显示软键盘

实现此效果的思路是,(1)首先在页面加载完成时,将文本输入框获得焦点;(2)然后显示出软键盘。
示例:

@Composable
fun TestScreen(
    state: Lifecycle.State
) {
    val keyboard = LocalSoftwareKeyboardController.current
    val focus = remember {
        FocusRequester()
    }
    // 判断页面生命周期
    when (state) {
        Lifecycle.State.RESUMED -> {// 页面加载完成时
        	// 获得焦点
            focus.requestFocus()
            // 显示软键盘
            keyboard?.show()
        }
        else -> {}
    }
    BasicTextField(
    		// 设置焦点请求器
            modifier = Modifier.focusRequester(focus), 
            ...
        )
}

2.动态显示页面某个布局时,自动显示软键盘

当页面已经加载完成,在显示某个布局时(比如页内弹窗),同时显示软键盘。
虽然没有生命周期可监听,但我们可以利用LaunchedEffect()启动协程,来延时显示键盘。
示例:

@Composable
fun TestDialog(
    state: Lifecycle.State
) {
    val keyboard = LocalSoftwareKeyboardController.current
    val focus = remember {
        FocusRequester()
    }
    // 协程中延时300毫秒,获取焦点并显示软键盘
    LaunchedEffect(Unit) {
        delay(300)
        focus.requestFocus()
        keyboard?.show()
    }
    BasicTextField(
    		// 设置焦点请求器
            modifier = Modifier.focusRequester(focus), 
            ...
        )
}

3. 隐藏软键盘

以前我们可以利用InputMethodManager 来显示隐藏软键盘。

val inputManager = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
        inputManager.hideSoftInputFromWindow(currentFocus?.windowToken,0)

现在Compose中,只需调用hide()方法即可。

val keyboard = LocalSoftwareKeyboardController.current
// 请在触发事件中调用hide方法
keyboard?.hide()

三、适配状态栏、导航栏的高度

1. 顶部状态栏高度

Spacer(modifier = Modifier.statusBarsPadding())

2. 底部导航栏高度

Spacer(modifier = Modifier.navigationBarsPadding())

四、监听物理返回键

场景:页面中显示弹窗时,当点击物理返回键应该收起弹窗,而不是整个页面返回。

BackHandler(
        // 是否开启返回键处理
        enabled = true,
        onBack = {
        // 处理返回键事件
        }
    )

总结

以上就是今天要讲的内容,本文仅仅简单介绍了常使用的几个方法 ,适合快速查阅,后面不定时加入新的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

两块三刀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值