Приведенный ниже код отлично работает на Android 14-, но на Android 15 нижняя часть всплывающей подсказки обрезана:
[img]https:/ /i.sstatic.net/WxjaCpYw.png[/img]
Нижняя часть красной рамки отсутствует, видна только верхняя часть буквы «g».
Похоже, не хватает высоты верхней строки состояния. Как это исправить? Код:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
var veryLongTooltip = ""
for (i in 0..60) { // generate 60 lines
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")
}
}
}
Отредактировано:
Не знаю, почему это происходит, но в итоге я использовал обходной путь, чтобы ограничить максимальную высоту текста 90% экрана. .
@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)
)
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... een-height