You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose:实现FAB键盘显示时贴顶、隐藏时居屏底

在Jetpack Compose中实现随软键盘调整位置的FAB

要让FAB在软键盘显示时贴在键盘顶部,隐藏时回到屏幕底部,需要结合**窗口Insets(WindowInsets)**和正确的Activity配置,具体实现如下:

1. 配置Activity软键盘调整模式

在AndroidManifest.xml中,给目标Activity添加adjustResize模式,确保布局能随软键盘弹出重新调整:

<activity
    android:name=".YourActivity"
    android:windowSoftInputMode="adjustResize">
</activity>

2. 编写动态适配的FAB代码

利用Compose的WindowInsets.ime获取软键盘的Insets,通过Modifier.windowInsetsPadding让FAB自动适配键盘位置,同时保留基础底部内边距:

FloatingActionButton(
    modifier = Modifier
        .padding(end = 2.dp)
        // 自动适配软键盘高度,键盘弹出时将FAB顶至键盘顶部
        .windowInsetsPadding(WindowInsets.ime)
        // 键盘隐藏时,FAB距离屏幕底部的基础间隙
        .padding(bottom = 2.dp),
    onClick = { visible = !visible }
) {
    Icon(
        imageVector = Icons.Outlined.Send,
        contentDescription = "Send"
    )
}

如果在Scaffold中使用FAB,可结合组件自身配置实现相同效果:

Scaffold(
    floatingActionButton = {
        FloatingActionButton(
            onClick = { visible = !visible },
            modifier = Modifier.windowInsetsPadding(WindowInsets.ime)
        ) {
            Icon(Icons.Outlined.Send, contentDescription = "Send")
        }
    },
    floatingActionButtonPosition = FabPosition.End
) { innerPadding ->
    // 页面内容,使用innerPadding避免被FAB遮挡
    Column(modifier = Modifier.padding(innerPadding)) {
        OutlinedTextField(
            value = text,
            onValueChange = { text = it },
            label = { Text("输入内容") }
        )
        // 其他页面元素
    }
}

效果说明

  • 软键盘隐藏时:FAB通过padding(bottom = 2.dp)保持在屏幕底部,保留指定间隙
  • 软键盘显示时:windowInsetsPadding(WindowInsets.ime)自动将FAB底部padding设为键盘高度,让FAB刚好贴在键盘顶部

内容的提问来源于stack exchange,提问作者Slava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 11:06:04