Android 15 Tooltip超出屏幕高度时底部截断问题及临时解决
Android 15中RichTooltip底部截断问题
问题现象
在Android 14及以下版本运行正常的RichTooltip,在Android 15中出现底部截断:红边框底部缺失,最后一行文本的字母'g'仅显示顶部部分,推测是Tooltip高度计算未考虑顶部状态栏高度导致。
复现代码
class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() var veryLongTooltip = "" for (i in 0..60) { // 生成60行文本 veryLongTooltip += "$i\n" } veryLongTooltip += "\n" + "last line aaaaaa bbbbbbb cccccc dddddd eeeeee fffffff ggggggg" setContent { TestTheme { Scaffold { innerPadding -> Column( modifier = Modifier.padding(innerPadding), ) { TooltipButton(tooltipText = veryLongTooltip) } } } } } } @OptIn(ExperimentalMaterial3Api::class) @Composable fun TooltipButton(tooltipText: String) { val tooltipState = rememberTooltipState(isPersistent = true) TooltipBox( positionProvider = TooltipDefaults.rememberRichTooltipPositionProvider(), tooltip = { RichTooltip( shape = RoundedCornerShape(5.dp), modifier = Modifier .border(4.dp, Color.Red, shape = RoundedCornerShape(5.dp)) ) { Text( tooltipText, fontSize = 18.sp, modifier = Modifier.verticalScroll(rememberScrollState()) ) } }, state = tooltipState ) { val coroutine = rememberCoroutineScope() Button( onClick = { coroutine.launch { tooltipState.show() } } ) { Text("click to show the tooltip") } } }
临时修复方案
通过限制Tooltip内文本区域的最大高度为屏幕高度的90%,避免内容超出可显示范围。实现一个Modifier扩展函数:
@Composable fun Modifier.maxScreenHeight(percentage: Float): Modifier = composed { val ctx = LocalContext.current val density = LocalDensity.current val maxHeight = density.run { val screenHeightPx = ctx.resources.displayMetrics.heightPixels screenHeightPx.toDp().value * percentage } this.then( Modifier.heightIn(max = maxHeight.dp) ) }
使用时,在Text的Modifier中添加该限制:
Text( tooltipText, fontSize = 18.sp, modifier = Modifier .verticalScroll(rememberScrollState()) .maxScreenHeight(0.9f) )
内容的提问来源于stack exchange,提问作者aj3423
相关产品推荐
相关产品推荐

