Jetpack Compose中ClickableText点击偏移返回字符不符合预期原因排查
问题根因
- 该问题是Jetpack Compose中
TextLayoutResult.getOffsetForPosition方法的固有设计逻辑导致的,该方法的计算规则是返回距离点击坐标最近的字符间隙对应的偏移值,而非返回点击区域覆盖的字符对应的索引。 - 以你的测试用例为例,第一个字符"T"的 bounding box 水平范围假设为
[0, 20],两个字符"T"和"h"的间隙位置对应的x坐标为20。当你点击的x坐标大于10(也就是"T"的水平中心位置)时,点击位置距离间隙20更近,方法就会返回间隙对应的偏移值1,也就对应到了第二个字符"h",和你遇到的点击"T"返回"h"的现象完全吻合。 - 你的日志输出也完全符合这个逻辑:你取第0个字符的boundingBox中心x坐标加1,刚好落在"T"的右半区域,距离偏移1对应的间隙更近,所以返回值为1。
可选修复方案
如果要实现「点击区域落在哪个字符的范围内就返回对应字符索引」的效果,不要直接使用getOffsetForPosition的返回值,你可以自行遍历所有字符的boundingBox,判断点击坐标落在哪个字符的boundingBox范围内,就返回对应的索引即可。
内容的提问来源于stack exchange,提问作者user15474689
相关产品推荐
相关产品推荐

