系列文章目录
- Android: Jetpack Compose如何禁用涟漪(水波纹)效果
- Android:使用Jetpack Compose 实现Text控件跑马灯效果
- Android:使用Jetpack Compose实现自动轮播Banner
- Android:使用Jetpack Compose画渐变背景
- Android:Jetpack Compose——实用的小技巧
文章目录
前言
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 = {
// 处理返回键事件
}
)
总结
以上就是今天要讲的内容,本文仅仅简单介绍了常使用的几个方法 ,适合快速查阅,后面不定时加入新的内容。