当前位置: 首页 > news >正文

Compose 适配 - 键鼠模式

一、概念

不止触摸交互,在 ChromeOS 或外接键鼠的设备上,需要考虑焦点、悬停、右键等操作逻辑。

二、使用

2.1 焦点

使用 Tab 键来导航,改变边框以提供清晰的焦点指示器。

@Composable
fun Demo() {val interactionSource = remember { MutableInteractionSource() }val isFocused by interactionSource.collectIsFocusedAsState()val border = BorderStroke(width = if (isFocused) 3.dp else 1.dp,color = if (isFocused) Color.Red else Color.Black)Box(modifier = Modifier.focusable(interactionSource = interactionSource).border(border)) {}
}

2.2 右键

右键/长按,表示更多选项。

@Composable
fun Demo() {var showMore by rememberSaveable { mutableStateOf(false) }var pressOffset by remember { mutableStateOf(DpOffset.Zero) }Box(modifier = Modifier.pointerInput(Unit) {detectTapGestures(onLongPress = { offset ->pressOffset = DpOffset(offset.x.toDp(), offset.y.toDp())showMore = true})}) {DropdownMenu(expanded = showMore,onDismissRequest = { showMore = false },offset = pressOffset) {DropdownMenuItem(text = { Text("AAA") }, onClick = {  })DropdownMenuItem(text = { Text("BBB") }, onClick = {  })}}
}

2.3 悬停

让组件感知鼠标悬停,改变背景色。

@Composable
fun Demo() {val interactionSource = remember { MutableInteractionSource() }val isHovered by interactionSource.collectIsHoveredAsState()val backgroundColor = if (isHovered) Color.Gray else Color.WhiteBox(modifier = Modifier.hoverable(interactionSource = interactionSource).background(backgroundColor)) { }
}
http://www.dtcms.com/a/295348.html

相关文章:

  • Ethereum: 从 1e+21 到千枚以太币:解密 Geth 控制台的余额查询
  • Day30| 452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间
  • 风险分级响应管理分析系统
  • 基于 PIC16 系列的多功能电子烟(温控 + 电压控制 + 多模式)方案
  • 亚马逊云科技 EC2 部署 Dify,集成 Amazon Bedrock 构建生成式 AI 应用
  • 【初识数据结构】CS61B 中的归并排序和选择排序
  • python学习xlsx表格导入mysql脚本 + leetcode19删除链表倒N + python与本地mysql连接不上排错
  • 每日算法-两数之和
  • Go基础教程 从零到英雄:30分钟掌握Go语言核心精髓
  • Leetcode—1035. 不相交的线【中等】
  • 独家|百度副总裁尚国斌即将离职,此前统筹百度地图;行业搜索及智能体业务总经理谢天转岗IDG
  • MongoDB 和 Elasticsearch(ES)区别
  • 项目重新发布更新缓存问题,Nginx清除缓存更新网页
  • MAC包头、IP包头 、UDP包头中的长度含义是啥?三者之间有啥区别?
  • Node.js 版本兼容问题:minimatch@10.0.3和minio@7.0.28 冲突的解决
  • Node.js 全局对象
  • Ubuntu-安装Asyn教程
  • 造成服务器内存不足的原因有什么
  • Node.js 中的内置模板path
  • Node.js特训专栏-实战进阶:18.密码加密与安全传输
  • node.js中的fs与path模块
  • 04.建造者模式的终极手册:从快餐定制到航天飞船的组装哲学
  • React+threejs两种3D多场景渲染方案
  • STM32 HAL库 HAL_TIM_OC_Stop函数详细解释
  • 期待更好的发展
  • 文件管理困境如何破?ZFile+cpolar打造随身云盘新体验
  • 亲测有效:EPLAN导出CAD图纸,DWG文件里的图纸复制粘贴出错和无法编辑的解决方法
  • EIDE 创建基于STM32-HD的项目快速创建流程
  • 精通Python PDF裁剪:从入门到专业的三重境界
  • 回调后门 函数